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提示开始:“在视图更新期间修改状态,这将导致未定义的行为”解释了原因。