谁知道为什么didSet在TabView上不再工作(ios16 Xcode 12) ?
@State var selected: Int {
didSet {
UserDefaults.activeTab = selected <<-- never gets called
}
}
var body: some View {
TabView(selection: $selected) {
Text("food")
.tabItem {
Label("food", systemImage: "bolt.fill")
}
.tag(0)
Text("wtr")
.tabItem {
Label("water", systemImage: "drop.fill")
}
.tag(1)
}
这似乎是一个功能性的解决方案
@State var selected: Int
var body: some View {
TabView(selection: $selected) {
Text("food")
.tabItem {
Label("food", systemImage: "bolt.fill")
}
.tag(0)
.onAppear{ UserDefaults.activeTab = 0 }
Text("wtr")
.tabItem {
Label("water", systemImage: "drop.fill")
}
.tag(1)
.onAppear{ UserDefaults.activeTab = 1 }
}
在SwiftUI中,不能用didSet
代替State
变量。相反,您可以使用onChange(of:perform:)
方法。当指定变量的值发生变化时,该方法将被调用。
在你的例子中,你的视图看起来像这样:
@State var selected: Int
var body: some View {
TabView(selection: $selected) {
Text("food")
.tabItem {
Label("food", systemImage: "bolt.fill")
}
.tag(0)
Text("wtr")
.tabItem {
Label("water", systemImage: "drop.fill")
}
.tag(1)
}
.onChange(of: selected) { newValue in
UserDefaults.activeTab = newValue
}
}