0

如果这已经被覆盖,我很抱歉,我在问这个问题时可能会犯任何错误——我对 Stackoverflow 和 SwiftUI 都很陌生。因此,据我了解,在更改变量时会调用 didSet。但是,当我执行此代码时,尽管 var number1 和 var number2 正在更改,但似乎 var finalNum 并未更新?为什么 number1 和 number2 对应的 didSet 没有被执行?这个想法是 number1 和 number2 的选择器彼此相邻,因此 number1 用于设置 finalNum 的十位,而 number2 用于设置个位。

(其中很多不是来自我自己;它来自我用来熟悉 Picker 的一个例子。

import SwiftUI

struct ContentView: View {
    @State private var finalNum = 0
    @State private var number1 = 1{
        didSet{
            finalNum = number1*10+number2
        }
    }
    @State private var number2 = 1{
        didSet{
            finalNum = number1*10+number2
        }
    }
    
    var body: some View {
        VStack {
            GeometryReader{ geo in
                HStack{
                    Picker("", selection: $number1) {
                        ForEach(1...10, id: \.self) {
                            Text("\($0)")
                        }
                    }.frame(maxWidth: geo.size.width / 2)
                    .clipped()
                    Picker("", selection: $number2) {
                        ForEach(1...10, id: \.self) {
                            Text("\($0)")
                        }
                    }.frame(maxWidth: geo.size.width / 2)
                    .clipped()
                }
            }
            Text("number: \(finalNum)")
            Spacer()
        }
    }
}
4

0 回答 0