[英]How to call method in ViewController from viewmodel in swift?
[英]How to call method in view from viewmodel in swift?
我在 swiftUi 中有視圖和視圖模型,因為我有一個 function 來顯示當 API 調用失敗時需要調用的警報。 API 功能是在視圖 model 中編寫的,當 api 在視圖模型中給出錯誤時,我不確定如何從視圖中調用方法。
//看法
@State private var showDialogBox = false
func action(message: String) {
showDialogBox.toggle()
}
var body: some View {
VStack(alignment: .leading, spacing: .afklSpacingL) {
Text(TranslationKeys.selectPassengerTitle.title)
}
}
.overlay(showDialogBox ? AnyView(DialogBoxTwoButtons(accessibilityID: "dialogboxes", dialogboxType: .warning, dialogboxTitle: "Title", dialogboxBody: "body", dialogboxFirstButtonTitle: "Ok", dialogboxFirstButtonCallback: { action(message: "Ok") }, dialogboxSecondButtonTitle: "Cancel", dialogboxSecondButtonCallback: { action(message: "Cancel") }, isDialogboxFirstButtonClicked: $isDialogboxFirstButtonClicked, isDialogboxSecondButtonClicked: $isDialogboxSecondButtonClicked)
) : AnyView(EmptyView()))
//視圖模型
extension abcViewModel: Listener {
func apiCall(error: KitError?, uuid: UUID) {
if error == nil,
} else {
//call "action" method in View to show dialog box
}
}
}
ViewModel 應該具備什么能力?
視圖 model 是公開公共屬性和命令的視圖的抽象。 代替 MVC 模式的 controller 或 MVP 模式的演示者,MVVM 有一個活頁夾,它可以自動在視圖 model 中的視圖及其綁定屬性之間進行通信。
您應該做的是創建 ViewModel 的共享實例,或者您可以為此使用協調器,但對於您的解決方案,共享實例可以在您的視圖中使用。 像這樣
class abcViewModel {
static var shared = abcViewModel()
func apiCall(error: KitError?, uuid: UUID) {
if error == nil{
} else {
//call "action" method in View to show dialog box
}
}
}
在你看來
var viewModel = abcViewModel.shared
現在您的公共方法在您的視圖 class 中可用。
那里可能有更好的選擇。 這里的每個人都是為了學習。 謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.