我有視圖和視圖模型。我正在從視圖導航到作業表并做一些事情并關閉它,一旦我關閉作業表,我想在 viewModel 中呼叫一個方法。
在FirstView展示表中
.sheet(isPresented: $showAddView) {
AddView(viewModel: AddViewModel(showAddView: $showAddView))
}
在FirstViewModel 中,我想在作業表上呼叫方法關閉
func update() {
print("I get called")
//some logic
}
在操作表中添加視圖
doing some logic and dismissing
請幫助我應該如何呼叫方法。謝謝你的幫助。
uj5u.com熱心網友回復:
如果您想知道視圖何時被解除,您可以觀察到showAddView如下變化:
.sheet(isPresented: $showAddView) {
AddView(viewModel: AddViewModel(showAddView: $showAddView))
}
.onChange(of: showAddView) { newValue
guard !newValue else { return }
// Will be executed when newValue changes to false
// I think it will also be called the first time your view is loaded
}
uj5u.com熱心網友回復:
一個很好的解決方案是將函式作為引數傳遞。這里的一般想法是匹配您的函式簽名以使其允許它。因此,在您的 FirstViewModel 上,您已經獲得了方法,update()您可以通過AddView()執行類似操作將其作為物件的屬性傳遞給。此外,如果您有一個AddView需要在您的update函式中使用的值,這也特別有用。
第一個視圖模型
.sheet(isPresented: $showAddView) {
AddView(viewModel: AddViewModel(showAddView: $showAddView), update: update)
}
添加視圖
只需添加一個屬性來保存傳遞的函式。然后呼叫它關閉。
{
let update: () -> ()
// The rest of your view
//Close Button
Button(action {
self.update()
}, label(...
}
什么是函式簽名?
假設您的更新功能是這樣的。
func update(someInt: Int) {
//Do Something
}
您可以通過創建這樣的屬性來匹配簽名。
let someUpdateFunc: (Int) -> ()- 語法是
name: -> (Type) -> (Return Type) - 也可以有多種型別作為引數。例如
let someOtherFunc: (Int, String) -> ()
uj5u.com熱心網友回復:
.sheet(isPresented: $shouldAddView, onDismiss: viewModel.update) { ... }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/346323.html
