【发布时间】:2021-02-13 08:14:27
【问题描述】:
尝试保存用户设置,但 UserDefaults 不起作用,Xcode 12.3,swiftui 2.0,当我重新加载我的应用程序时,我的设置没有更新为新值)
class PrayerTimeViewModel: ObservableObject {
@Published var lm = LocationManager()
@Published var method: CalculationMethod = .dubai {
didSet {
UserDefaults.standard.set(method.params, forKey: "method")
self.getPrayerTime()
}
}
func getPrayerTime() {
let cal = Calendar(identifier: Calendar.Identifier.gregorian)
let date = cal.dateComponents([.year, .month, .day], from: Date())
let coordinates = Coordinates(latitude: lm.location?.latitude ?? 0.0, longitude: lm.location?.longitude ?? 0.0)
var par = method.params
par.madhab = mashab
self.times = PrayerTimes(coordinates: coordinates, date: date, calculationParameters: par)
}
并查看.. 使用 AppStorage 进行更新
struct MethodView: View {
@ObservedObject var model: PrayerTimeViewModel
@Environment(\.presentationMode) var presentationMode
@AppStorage("method", store: UserDefaults(suiteName: "method")) var method: CalculationMethod = .dubai
var body: some View {
List(CalculationMethod.allCases, id: \.self) { item in
Button(action: {
self.model.objectWillChange.send()
self.presentationMode.wrappedValue.dismiss()
self.model.method = item
method = item
}) {
HStack {
Text("\(item.rawValue)")
if model.method == item {
Image(systemName: "checkmark")
.foregroundColor(.black)
}
}
}
}
}
}
【问题讨论】:
-
你在哪里加载来自
UserDefaults的值?您还应该显示CalculationMethod的代码 -
我正在使用 AppStorage、checkOut、我的技能 swiftui Junior 更新我的视图)也许我没有取消
-
你还没有显示
CalculationMethod,那是什么?什么是method.params?您还可以从两个不同的UserDefaults套件(标准和方法)中存储和检索。 -
CalculationMethod 是带case的枚举,所以这个枚举里面的params是var,他是切换case并返回一些参数,所以用户只能在SettingView中选择case,但我无法保存)跨度>
-
您似乎将参数保存在 userdefaults 中,但随后将枚举与您的 AppStorage 属性包装器一起使用。 CalculationMethod 的代码可以吗?
标签: swift swiftui userdefaults