我對 Swift 還很陌生,而且我已經遇到了問題。根據我的理解,將應用程式拆分為描述資料的模型、顯示內容并允許用戶輸入的視圖以及將用戶的意圖轉換為資料修改并允許視圖做出相應反應的視圖模型是一種很好的做法。
話雖如此,我開始使用該邏輯制作一個非常簡單的應用程式。所以我創建了一個模型檔案,如下所示:
import Foundation
struct MyModel {
var testData: Double
...
}
然后是一個看起來像這樣的視圖模型;
import Foundation
class MyViewModel: ObservableObject {
@Published var myModel = MyModel(testData: 0)
func setTest(_ newVal: Double) {
splitModel.testData = newVal
}
...
}
最后是我的觀點:
struct ContentView: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
NavigationView {
Form {
Section {
TextField("Hello", value: viewModel.splitModel.amount, format: .currency(code: "USD"))
}
}
}
}
}
這不起作用,因為viewModel.splitModel.amount它不是一個系結而是一個直接的 Double。我發現解決這個問題的唯一方法是使用@State 將資料放入視圖中,這正是我試圖通過獲取此檔案結構來避免的。
我很想解釋一下我應該實作的邏輯以使其作業,并且可能會糾正我對 Swift 的理解。提前致謝 !
uj5u.com熱心網友回復:
您可以使用$標志來指代系結。
TextField("Hello", value: $viewModel.splitModel.amount, format: .currency(code: "USD"))
也不要@ObservedObject在這里使用@StateObject。@ObservedObject只有當視圖沒有初始化視圖模型并且它被注入時才應該使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494331.html
下一篇:用按鈕暫停計時器
