我有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的一部分?
答案 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")