我对 Swift 和 iOS 应用程序真的很陌生,无法弄清楚以下内容。
我正在尝试创建一个简单的 5 步评级元素,将值存储到用户默认值。但它不能“即时”工作,这意味着用户无法立即看到更改,只能在重新启动应用程序时看到。通过不同的不透明度表示的评级。
所以,问题是: 点击时不会立即显示更改,而是在重新启动应用程序后才会显示更改。
我阅读了有关@AppStorage 的文章,但无法弄清楚。
struct EverythingView: View {
@AppStorage("customRating") var customTemp: Int = 1
HStack (spacing: 6) {
ForEach(1...5, id: \.self) { index in
Circle()
.fill(Color(.green))
.frame(width: 15, height: 15)
.onTapGesture {
customRating = index
print(customRating) // prints the correct value on the fly
}
.opacity(index > customRating ? 0.5 : 1) // does not update the opacity of the circles on the fly, only on relaunching the app
}
}
}
我是否必须在循环内的某个地方再次访问@AppStorage?据我了解,它会自动更新和传播吗?
感谢您的任何提示!
编辑:
使用 an@State
而不是@AppStorage
var
按预期工作。