我有一個自定義首選項類,我想在更改時觸發一個函式,目前由于某種原因它似乎不起作用。
這是班級
class Preferences: ObservableObject, Equatable{
static func == (lhs: Preferences, rhs: Preferences) -> Bool {
return lhs.email == rhs.email && lhs.password == rhs.password && lhs.faceID == rhs.faceID && lhs.currency == rhs.currency && lhs.colourScheme == rhs.colourScheme && lhs.appTheme == rhs.appTheme
}
@Published var email: String = ""
@Published var password: String = ""
@Published var faceID: Bool = false
@Published var currency: Currencies = .EUR
@Published var colourScheme: ColourScheme = .system
@Published var appTheme: Theme = .orange
這存盤在視圖模型中
class ViewModel: ObservableObject {
@Published var preferences = Preferences()
}
這是 onchange 呼叫
.onChange(of: viewModel.preferences){ newValue in
viewModel.updateSettings(faceID: viewModel.preferences.faceID, currency: viewModel.preferences.currency, colourScheme: viewModel.preferences.colourScheme, appTheme: viewModel.preferences.appTheme)
}
onchange 永遠不會被呼叫?任何幫助,將不勝感激。謝謝
uj5u.com熱心網友回復:
因為首選項是一個物件,所以沒有變化,即它始終是同一個物件。SwiftUI 旨在處理值語意,即結構,因此請嘗試創建Preferences一個結構。
也不需要那個視圖模型物件,在 SwiftUI 中,View 結構已經是一個視圖模型,SwiftUI 使用它來創建/更新/洗掉螢屏上的 UIView 物件。我們@StateObject在需要參考型別時使用@State,例如在執行異步操作時,但是 new.task取代了這種需要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536527.html
標籤:代码迅捷变化平等的
