【发布时间】:2020-10-13 22:19:01
【问题描述】:
嘿,由于状态更改或保存操作,某些 SwiftUI 代码被多次调用是否正常?此代码是一个选择器,有 4 个选项可供选择。然后通过方法 saveBase 将选定的选项保存到 UserDefaults。我在方法中添加了一条打印语句以确认我的值正确到达,并发现每次对选择器进行更改时,该方法都会被调用 19 次。该代码可以正常保存和恢复baseCurr。作为具有汇编和 C 经验的固件工程师,我认为这是相当有缺陷的代码,但我不太确定。有什么想法吗?
class UserData: ObservableObject {
@Published var baseCurr: Int = 0
func saveBase() -> () {
let defaults = UserDefaults.standard
defaults.set(self.baseCurr, forKey: "base")
print(" base Curr = \(self.baseCurr)")
}
}
struct aboutView: View {
@EnvironmentObject var userData: UserData
let baseCurrs = ["block A", "block B","block C","block D"]
var body: some View {
Form {
VStack (alignment: .leading) {
Text("Select Base")
Picker(selection: $userData.baseCurr, label: Text("Curr >")) {
ForEach(0 ..< baseCurrs.count) {
Text( baseCurrs[$0])
}
.onChange(of: userData.baseCurr) { newValue in
userData.saveBase()
}
}
}
.padding()
}
.navigationBarTitle("About", displayMode: .inline)
}
}
【问题讨论】:
-
将
.onAppear附加到Picker或VStack而不是ForEach
标签: swift swiftui ios14 userdefaults