PreferencesEditorDataFlow.swift 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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 infoText: String
  8. var value: T {
  9. didSet {
  10. settable?.onSet(keypath, value: value)
  11. }
  12. }
  13. weak var settable: PreferencesSettable?
  14. init(
  15. displayName: String,
  16. keypath: WritableKeyPath<Preferences, T>,
  17. value: T,
  18. infoText: String,
  19. settable: PreferencesSettable? = nil
  20. ) {
  21. self.displayName = displayName
  22. self.keypath = keypath
  23. self.value = value
  24. self.infoText = infoText
  25. self.settable = settable
  26. }
  27. let id = UUID()
  28. }
  29. }
  30. protocol PreferencesEditorProvider: Provider {
  31. var preferences: Preferences { get }
  32. func savePreferences(_ preferences: Preferences)
  33. func migrateUnits()
  34. }
  35. protocol PreferencesSettable: AnyObject {
  36. func onSet<T>(_ keypath: WritableKeyPath<Preferences, T>, value: T)
  37. }