import Foundation enum PreferencesEditor { enum Config {} class Field: Identifiable { var displayName: String var keypath: WritableKeyPath var value: T { didSet { settable?.onSet(keypath, value: value) } } weak var settable: PreferencesSettable? init(displayName: String, keypath: WritableKeyPath, value: T, settable: PreferencesSettable? = nil) { self.displayName = displayName self.keypath = keypath self.value = value self.settable = settable } let id = UUID() } } protocol PreferencesEditorProvider: Provider { var preferences: Preferences { get } func savePreferences(_ preferences: Preferences) func migrateUnits() } protocol PreferencesSettable: AnyObject { func onSet(_ keypath: WritableKeyPath, value: T) }