SwiftUI 发布值上的 toggle() 函数停止触发 didSet Swift 5.2
SwiftUI toggle() function on Published values stopped triggering didSet with Swift 5.2
我刚刚将 Xcode 从 11.3 更新到 11.4,我用 SwiftUI 编写的项目开始出现不同的行为。我曾经为布尔值调用 toggle()
函数,它曾经触发 didSet
属性 观察者,但是,它不再工作了。
假设我们有一个名为 isSettingOn
的 State
属性。我曾经这样称呼:
isSettingOn.toggle()
这触发了 属性 的 didSet
观察者。现在,只有我这样称呼:
isSettingOn = true
正在运行。
我的项目都是基于这种行为,现在这种变化基本上破坏了一切。有谁知道我在这里是否真的做错了什么?
编辑:
添加了演示代码:
struct ContentView: View {
@State var isSettingOn: Bool = true {
didSet {
print("didSet isSettingOn")
}
}
var body: some View {
Button(action: {
self.isSettingOn = true // will trigger didSet
self.isSettingOn.toggle() // won't trigger didSet
}) {
Text("Toggle isSettingOn")
}
}
}
这是 Xcode 11.4 and 11.4.1
中的一个错误,已在 Xcode 11.5 (Beta)
中用 Swift 5.2.4
修复。
我刚刚将 Xcode 从 11.3 更新到 11.4,我用 SwiftUI 编写的项目开始出现不同的行为。我曾经为布尔值调用 toggle()
函数,它曾经触发 didSet
属性 观察者,但是,它不再工作了。
假设我们有一个名为 isSettingOn
的 State
属性。我曾经这样称呼:
isSettingOn.toggle()
这触发了 属性 的 didSet
观察者。现在,只有我这样称呼:
isSettingOn = true
正在运行。
我的项目都是基于这种行为,现在这种变化基本上破坏了一切。有谁知道我在这里是否真的做错了什么?
编辑:
添加了演示代码:
struct ContentView: View {
@State var isSettingOn: Bool = true {
didSet {
print("didSet isSettingOn")
}
}
var body: some View {
Button(action: {
self.isSettingOn = true // will trigger didSet
self.isSettingOn.toggle() // won't trigger didSet
}) {
Text("Toggle isSettingOn")
}
}
}
这是 Xcode 11.4 and 11.4.1
中的一个错误,已在 Xcode 11.5 (Beta)
中用 Swift 5.2.4
修复。