在Swift中,使用单例模式的情况下,即使类遵循ObservableObject以及参数的属性包装器为@Published,如果视图中没有使用@StateObject或@ObservedObject来观察它,视图就不会更新。
// 汇率类
class ExchangeRate:ObservableObject {
// 汇率单例模式
static var ExchangeRateExamples = ExchangeRate()
// 汇率信息结构
@Published var ExchangeRateStructInfo = ExchangeRateStruct(
...
)
}
例如上图代码部分,一个汇率类使用单例模式。
struct HomeView: View {
var body: some View {
...
}
}
但是视图部分并没有通过@StateObject或@ObservedObject来观察它。
就会导致,只能通过单例模式来获取部分默认信息,但实际的异步方法的调取和返回信息都不会同步到视图。
就像单例模式的方法只在幕后工作,舞台上的人如果没有耳返的话,就不知道幕后的情况。
因此,应该给View视图带一个“耳返”,这样单例数据更新时,前台才会同步。
struct HomeView: View {
@StateObject private var exchangeRate = ExchangeRate.ExchangeRateExamples
var body: some View {
...
}
}
这样单例的数据就会被View观察并进行同步。
在使用单例模式的时候,要注意视图需要通过@StateObject或@ObservedObject观察单例模式的数据更新情况。