所以我有一个类,它将切换的状态和选择器的选择记录到UserDefaults 中
import Foundation
import Combine
class UserSettings: ObservableObject {
@Published var shouldSort: Bool {
didSet {
UserDefaults.standard.set(shouldSort, forKey: "shouldSort")
}
}
@Published var sortKey: String {
didSet {
UserDefaults.standard.set(sortKey, forKey: "sortKey")
}
}
public var sortKeys = ["alphabetical", "length", "newest", "oldest"]
init() {
self.shouldSort = UserDefaults.standard.object(forKey: "shouldSort") as? Bool ?? true
self.sortKey = UserDefaults.standard.object(forKey: "sortKey") as? String ?? "Name"
}
}
在我的设置页面上,我使用以下代码
@ObservedObject var userSettings = UserSettings()
...
Toggle(isOn: $userSettings.shouldSort, label: {Text("Sort Books")})
Picker(selection: $userSettings.sortKey, label: Text("Sort By"), content: {
ForEach(userSettings.sortKeys, id: .self){ key in
Text(key)
}
})
这段代码可以很好地更改值,因为如果我关闭并打开应用程序,视图会根据数据更新。我正在用读取数据
@State var sorted = UserDefaults.standard.bool(forKey: "shouldSort")
@State var sort = UserDefaults.standard.string(forKey: "sortKey")
在我的内容视图中。(shouldSort调用一个函数进行排序,如果为true,则sortKey确定数据的排序方式(
我读错了@State变量的数据吗(@State甚至能检测到UserDefaults状态的变化吗(?
忘记你在UIKit中学到的关于UserDefaults的所有知识,在SwiftUI中向AppStorage问好,使用以下代码:
@AppStorage("shouldSort") var sorted: Bool = false
@AppStorage("sortKey") var sort: String = ""