依赖于UserDefaults的视图未在更改时更新



所以我有一个类,它将切换的状态和选择器的选择记录到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 = ""

最新更新