PreferencesEditorDataFlow.swift 933 B

123456789101112131415161718192021222324252627282930313233343536
  1. import Foundation
  2. enum PreferencesEditor {
  3. enum Config {}
  4. class Field<T>: Identifiable {
  5. var displayName: String
  6. var keypath: WritableKeyPath<Preferences, T>
  7. var value: T {
  8. didSet {
  9. settable?.onSet(keypath, value: value)
  10. }
  11. }
  12. weak var settable: PreferencesSettable?
  13. init(displayName: String, keypath: WritableKeyPath<Preferences, T>, value: T, settable: PreferencesSettable? = nil) {
  14. self.displayName = displayName
  15. self.keypath = keypath
  16. self.value = value
  17. self.settable = settable
  18. }
  19. let id = UUID()
  20. }
  21. }
  22. protocol PreferencesEditorProvider: Provider {
  23. var preferences: Preferences { get }
  24. func savePreferences(_ preferences: Preferences)
  25. }
  26. protocol PreferencesSettable: AnyObject {
  27. func onSet<T>(_ keypath: WritableKeyPath<Preferences, T>, value: T)
  28. }