通常,使用caram的方法是可以的,但是代码存在很多问题,SmushyTaco无法使其正常工作。在下面,您将找到“开箱即用”的工作解决方案。
import Foundation @propertyWrapper struct UserDefault{ let key: String let defaultValue: T init(_ key: String, defaultValue: T) { self.key = key self.defaultValue = defaultValue } var wrappedValue: T { get { return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue } set { UserDefaults.standard.set(newValue, forKey: key) } } }
final class UserSettings: ObservableObject { let objectWillChange = PassthroughSubject() @UserDefault("ShowOnStart", defaultValue: true) var showOnStart: Bool { willSet { objectWillChange.send() } } }
struct ContentView: View { @ObservedObject var settings = UserSettings() var body: some View { VStack { Toggle(isOn: $settings.showOnStart) { Text("Show welcome text") } if settings.showOnStart{ Text("Welcome") } } }