首页 > 解决方案 > 已发布值上的 SwiftUI toggle() 函数停止使用 Swift 5.2 触发 didSet

问题描述

我刚刚将我的 Xcode 从 11.3 更新到 11.4,我用 SwiftUI 编写的项目开始表现不同。我曾经为布尔值调用toggle()函数,它曾经触发didSet属性观察器,但是,它不再工作了。

假设我们有一个State名为 的属性isSettingOn。我曾经这样称呼它:

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")
        }
    }
}

标签: swiftswiftuicombineswift5.2xcode11.4

解决方案


这是一个错误Xcode 11.4 and 11.4.1,它已Xcode 11.5 (Beta)Swift 5.2.4.


推荐阅读