使用其他初始化变量的值初始化@State变量

时间:2020-05-04 04:48:14

标签: swiftui

我有2个@State变量:

@State var test1:String
@State var test2:String

我可以这样做:

    _test1 = State(initialValue: "test1")
    _test2 = State(initialValue: "test2")

这:

    _test1 = State(initialValue: "test1")
    _test2 = _test1

但不是这样:

    _test1 = State(initialValue: "test1")
    _test2 = State(initialValue: test1 + " and test2")

,错误:Variable 'self.test2' used before being initialized

这背后的原因是什么?是否有适当的方法将test1中的值用作test2的一部分?

2 个答案:

答案 0 :(得分:2)

这里是经过测试的解决方案。 Xcode 11.4 / iOS 13.4

struct TestStatesInitialization: View {
    @State var test1:String
    @State var test2:String

    init() {
        _test1 = State(initialValue: "test1")
        _test2 = State(initialValue: _test1.wrappedValue + " and test2")
    }
    var body: some View {
        VStack {
            Text("1: \(test1)")
            Text("2: \(test2)")
        }
    }
}

答案 1 :(得分:1)

swift编译器可防止您在初始化所有内容之前使用任何实例属性。一个好的解决方法是创建一个临时变量来保存test1的值,就像这样

let tempTest1 = State(initialValue: "test1")

 _test1 = tempTest1
 _test2 = State(initialValue: tempTest1.wrappedValue + " and test2")