bool 上的 .toggle() 函数不调用 didSet。这是一个错误吗?
.toggle() function on bool does not call didSet. Is this a bug?
我有一个带有 didSet 的 @State Bool 变量。我想在变量更改时做一些事情,因此我尝试使用 didSet。问题是当我使用 .toggle() 函数切换 bool 的状态时,没有调用 didSet。
以这段代码为例:
import SwiftUI
struct SwiftUIView: View {
@State var testBool = false {
didSet {
print("set")
}
}
var body: some View {
VStack {
Button(action: {
self.testBool.toggle()
}) {
Text("Toggle with .toggle()")
}
Button(action: {
if self.testBool {
self.testBool = false
} else {
self.testBool = true
}
}) {
Text("Toggle with if")
}
}
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
我只有两个按钮:
- 使用 .toggle() 函数通过一个按钮切换 bool 的状态。
- 下一个按钮使用基本 if/else
切换状态
使用 .toggle() 函数的顶部按钮不会按预期在变量上使用 didSet 在控制台中打印“set”。底部按钮符合预期。
这是一个已知的编译器回归 SR-12407。它可能会在下一个 Xcode 版本中修复。
我有一个带有 didSet 的 @State Bool 变量。我想在变量更改时做一些事情,因此我尝试使用 didSet。问题是当我使用 .toggle() 函数切换 bool 的状态时,没有调用 didSet。
以这段代码为例:
import SwiftUI
struct SwiftUIView: View {
@State var testBool = false {
didSet {
print("set")
}
}
var body: some View {
VStack {
Button(action: {
self.testBool.toggle()
}) {
Text("Toggle with .toggle()")
}
Button(action: {
if self.testBool {
self.testBool = false
} else {
self.testBool = true
}
}) {
Text("Toggle with if")
}
}
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
我只有两个按钮: - 使用 .toggle() 函数通过一个按钮切换 bool 的状态。 - 下一个按钮使用基本 if/else
切换状态使用 .toggle() 函数的顶部按钮不会按预期在变量上使用 didSet 在控制台中打印“set”。底部按钮符合预期。
这是一个已知的编译器回归 SR-12407。它可能会在下一个 Xcode 版本中修复。