40 lines
1.0 KiB
Swift
40 lines
1.0 KiB
Swift
//
|
|
// ViewUtiles.swift
|
|
// Bunch O' Dice
|
|
//
|
|
// Created by Rory Hinnen on 22/6/12.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
|
|
class SheetState<State>: ObservableObject {
|
|
@Published var isShowing = false
|
|
@Published var state: State? {
|
|
didSet { isShowing = state != nil }
|
|
}
|
|
}
|
|
|
|
class SettingsSheet: SheetState<SettingsSheet.State> {
|
|
enum State {
|
|
case settings, history
|
|
}
|
|
}
|
|
|
|
extension CaseIterable where Self: Equatable {
|
|
mutating func next() {
|
|
let allCases = Self.allCases
|
|
// just a sanity check, as the possibility of a enum case to not be
|
|
// present in `allCases` is quite low
|
|
guard let selfIndex = allCases.firstIndex(of: self) else { return }
|
|
let nextIndex = Self.allCases.index(after: selfIndex)
|
|
self = allCases[nextIndex == allCases.endIndex ? allCases.startIndex : nextIndex]
|
|
}
|
|
}
|
|
|
|
extension View {
|
|
func disabledWithOpacity(_ condition: Bool) -> some View {
|
|
self.disabled(condition).opacity(condition ? 0.4 : 1.0)
|
|
}
|
|
}
|