【问题标题】:SwiftUI toggle() function on Published values stopped triggering didSet with Swift 5.2已发布值上的 SwiftUI toggle() 函数停止使用 Swift 5.2 触发 didSet
【发布时间】:2020-03-28 22:39:52
【问题描述】:

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

假设我们有一个名为isSettingOnState 属性。我以前叫这个:

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

【问题讨论】:

  • 在这里工作正常。你能提供演示代码吗?
  • 谢谢@Asperi,我已经用示例代码更新了我的问题。另外,我意识到第一个问题(视图未更新)与我提到的第二个问题(没有触发didSet)有关,因此我也更新了问题内容。
  • 试试这个,它有效! stackoverflow.com/a/59391476/8457280
  • 看起来像一个将在下一个 Swift 版本中修复的错误。见github.com/apple/swift/pull/29931
  • 谢谢你们的cmets,我已经发布了一个答案,这是在Xcode 11.5中修复的。

标签: swift swiftui combine swift5.2 xcode11.4


【解决方案1】:

这是Xcode 11.4 and 11.4.1 中的一个错误,它已在Xcode 11.5 (Beta)Swift 5.2.4 中修复。

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多