1

我有一个带有 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()
    }
}

我只有 2 个按钮: - 一个按钮使用 .toggle() 函数切换布尔的状态。- 下一个按钮使用基本 if/else 切换状态

使用 .toggle() 函数的顶部按钮不会像预期的那样在控制台中使用变量上的 didSet 打印“set”。底部按钮按预期工作。

4

1 回答 1

1

这是一个已知的编译器回归SR-12407。它可能会在下一个 Xcode 版本中修复。

于 2020-04-16T09:55:40.033 回答