【问题标题】:SwiftUI State value doesn't changeSwiftUI 状态值不会改变
【发布时间】:2020-05-28 03:06:06
【问题描述】:

我不熟悉State。我测试了代码:

import SwiftUI
class TestState {
    @State var a: Int = 3
    func increaseA() {
        print("before \(a)") //3
        a += 1
        print("after \(a)") //3?
    }
}

TestState().increaseA()

碰巧打印的值都是3! 我哪里做错了?

State应该在View中的注释之后,我测试了代码:

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)
    }
}

碰巧Text 显示“3”,而不是“4”。我不明白。

【问题讨论】:

  • @State 应该在 SwfitUI 视图中,而不是在普通类中。
  • @Asperi,我很好奇,所以尝试了一下,将其更改为 View 并没有改变行为。也许@State 依赖于其他一些 SwiftUI 上下文?
  • 当然可以——我想你最好从developer.apple.com/tutorials/swiftui/tutorials开始
  • 我认为 Xcode 提示:“在视图更新期间修改状态,这将导致未定义的行为”解释了原因。

标签: swift swiftui swiftui-state


【解决方案1】:

@State 关键字最早是在 Swift5.1 中引入的,它是一个 @propertyWrapper,之前被称为 @propertyDelegate。更多详情请查看property-wrappers.mdAS PAUL HUDSON SAID : @State 专为本地视图使用而设计,Apple 建议将 @State 属性标记为私有,以真正重新强制它们不是设计的在其他地方访问:

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 2019-01-30
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多