1

我有一个非常基本的视图,仅显示TextField

看法

struct ContentView: View {

    @StateObject var viewModel = ViewModel()
    
    var body: some View {
        TextField("Enter a string...", text: $viewModel.string)
    }
    
}

TextField文本绑定到string视图模型上的属性:

视图模型

class ViewModel: ObservableObject {
    
    @Published var string: String = "" {
        didSet {
            print("didSet string:", string)
        }
    }
    
}

我添加了一个didSet属性观察器,以便在字符串更改时执行自定义操作。对于这个简单的示例,我只在控制台上打印一个字符串。

观察

当我运行此代码并将字符串“123”输入文本字段时,这是我得到的输出:

didSet string: 1
didSet string: 1
didSet string: 12
didSet string: 12
didSet string: 123
didSet string: 123

问题:

为什么?
为什么didSet我输入的每个字符都会调用两次闭包?(我希望每个角色都会调用一次。)

代码有什么问题还是这种预期的行为以某种方式?

4

0 回答 0