【问题标题】:SwiftUI @State not updatedSwiftUI @State 未更新
【发布时间】:2020-05-27 11:24:36
【问题描述】:

所以我对 UIKit 非常熟悉,但最近才开始使用 SwiftUI。我有一个来自NavigationLink 的非常基本的视图,但我不知道为什么这段代码不起作用。我无法更新那个@State var`,我尝试了所有你想不到的东西。我在这里做错了吗?谢谢!

struct Test: View {
    @State private var settingsEnabled: Bool = false {
        didSet {
            print(oldValue)
            print("DID SET")
            print(settingsEnabled)
        }
    }

    var body: some View {
        Button(action: {
            self.settingsEnabled.toggle()
        }) {
            Text(String("\(self.settingsEnabled)"))
        }
    }
}

【问题讨论】:

  • 我在 Xcode-playground 上尝试了你的代码,但在编译之前它给了我一个错误。没有收到吗?
  • 你遇到了什么错误?我没有

标签: ios swift swiftui


【解决方案1】:

您似乎缺少 View 一致性。

struct Test: View {
...
}

更新:似乎已经发生了,因为您直接使用了 Testbody struct 而不是符合 View 协议的 Test 结构,而后者又包含 @987654328 @@State变量。

【讨论】:

  • 是的,抱歉,意外删除。不过,它存在于实际代码中:)
  • 添加View 后,它工作得很好,没有问题。 settingsEnabled 正在切换。
  • 嗯,所以我猜这一定是因为这个 View 嵌入在 NavigationLink 中,但我会在操场上测试它并让你知道。谢谢!
  • 刚刚弄清楚原因!这就是为什么它在没有 View 一致性的情况下工作的原因,我实际上是在 ContentView 上使用 Test.body(它具有一致性)。认为这是实现这一目标的正确方法 :) 就像我说的,我仍在空闲时间学习这种新范式。然而,从来不知道这会产生如此大的影响,但我想这是有道理的。您想就我解释的内容扩展您的答案并将其标记为正确吗?谢谢!
  • 嘿,@Mykod 我已经更新了答案,尽管在问题编辑后问题和答案似乎不匹配。如果您可以将问题恢复到以前的版本会更好。谢谢。
猜你喜欢
  • 2021-01-06
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多