簡體   English   中英

如何從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM