SwiftUI状态值不为';不变
我不熟悉SwiftUI状态值不为';不变,swift,swiftui,swiftui-state,Swift,Swiftui,Swiftui State,我不熟悉状态。我测试了代码: import SwiftUI class TestState { @State var a: Int = 3 func increaseA() { print("before \(a)") //3 a += 1 print("after \(a)") //3? } } TestState().increaseA() import SwiftUI struct TestState: View
状态
。我测试了代码:
import SwiftUI
class TestState {
@State var a: Int = 3
func increaseA() {
print("before \(a)") //3
a += 1
print("after \(a)") //3?
}
}
TestState().increaseA()
import SwiftUI
struct TestState: View {
@State var a: Int = 3
func increaseA() {
print("before \(a)")
a += 1
print("after \(a)")
}
var body: some View {
increaseA()
return Text(a.description)
}
}
碰巧打印的值都是3!
我哪里做错了
在注释了状态
应该在视图
中之后,我测试了代码:
import SwiftUI
class TestState {
@State var a: Int = 3
func increaseA() {
print("before \(a)") //3
a += 1
print("after \(a)") //3?
}
}
TestState().increaseA()
import SwiftUI
struct TestState: View {
@State var a: Int = 3
func increaseA() {
print("before \(a)")
a += 1
print("after \(a)")
}
var body: some View {
increaseA()
return Text(a.description)
}
}
恰好
文本
显示的是“3”,而不是“4”。我不明白 @State关键字最初是在Swift5.1中引入的,它是一个@PropertyRapper,以前被称为@PropertyLegate。有关更多详细信息,请查看。
上面说:@State是专门为本地视图设计的,苹果建议将@State属性标记为私有属性,以确保它们不被其他地方访问:
@State
应该位于SwfitUI视图中,而不是普通类中。@Asperi,我很好奇,所以尝试了一下,将其更改为视图并不会改变行为。也许@State
取决于其他一些SwiftUI上下文?当然,我认为最好从Xcode提示开始:“在视图更新期间修改状态,这将导致未定义的行为”解释了原因。