【发布时间】:2020-08-17 09:46:30
【问题描述】:
我有以下课程:
struct PriceFormatter {
@AppStorage(UserDefaultsKey.savedCurrency)
var savedCurrency: String?
let price: Float
init(price: Float) {
self.price = price
}
var formatted: String {
return "\(savedCurrency) \(price)"
}
}
还有以下观点:
struct PriceText: View {
let price: Float
var body: some View {
Text(PriceFormatter(price: self.price).formatted)
}
}
我希望在 savedCurrency 从 UserDefaults 更改之后重新渲染视图。
当@AppStorage 是视图的一部分时,我让它很容易工作,但我不确定在这种情况下该怎么做。我尝试将@ObservableObject 与@Published 一起使用,或者尝试创建一个Combine Publisher 并订阅它,但也没有成功。
【问题讨论】:
-
@AppStorage按设计仅在 View 中工作。 -
@Asperi 他们为什么要这样做?
-
@Frankenstein。出于与
@State相同的原因... 提供一种简化的方式,在 UserDefaults 更改时动态更新视图...因此它们是动态属性包装器。 -
@Asperi 很有趣,在任何地方都没有看到这个。谢谢!
-
你做了什么来完成这项工作?这正是我想要实现的目标。