当输入变量发生更改时,如何在ContentView中使用属性观测器更新Text



使用XCode 11.4、Swift 5.0

每当我创建的变量(存储在应用程序的用户默认值中(发生更改时,我希望更新ContentView中的Text变量(correctionLabel(。下面的代码显示了每当输入变量发生更改时,我尝试使用didSet来更新ContentView中的文本:

//ContentView.swift
//this is a single page application

import SwiftUI
let defaults = UserDefaults.standard
var correctionLabel = Text("O")
var corrections = defaults.integer(forKey: "CorrectionCount") {
didSet {
correctionLabel = Text("(corrections)")
print("old value is (oldValue) and new value is (corrections)")
print(correctionLabel)
}
}
struct ContentView: View {
var body: some View {
correctionLabel
}
}
//code for incrementing the corrections variable not shown here

该应用程序的其他一切都经过了测试并正常工作,并通过print()测试进行了验证,以确保当iPhone方向发生变化时,corrections变量确实在增加。然而,屏幕上的计数器从0开始,但从未增加,控制台显示print(correctionLabel):的此错误

Text(storage: SwiftUI.Text.Storage.anyTextStorage(SwiftUI.(unknown context at $1cf871518).LocalizedTextStorage), modifiers: [])

我觉得这个问题一定是小问题,我在这里遗漏了一些东西,因为所需的最终产品是一个简单的屏幕计数器,从0开始,递增1。任何见解都将不胜感激!

找到解决方案:

我使用了SwiftUI新的@EnvironmentObject的实现,在这里可以看到一个不错的教程:https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-views

如果你像我一样在类中使用函数来更新你的变量(在这种情况下,它是校正变量(,请确保你引用的是类函数的同一实例,而不是调用类函数的新实例!

最新更新