【发布时间】:2020-03-28 22:39:52
【问题描述】:
我刚刚将我的 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")
}
}
}
【问题讨论】:
-
在这里工作正常。你能提供演示代码吗?
-
谢谢@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