私はビデオシリーズを見ていますSwift - ビューモデルでクロージャを使用して関数を起動する方法
スウィフトの話#5 ビューコントローラに URL接続:彼らはすべてのprepareForSegue
を削除し、別のビューコントローラ間の接続を処理するためにApp
クラスを使用して、このビデオシリーズではhttps://talk.objc.io/episodes/S01E05-connecting-view-controllers
を。
私はこれを複製したいと思いますが、具体的には私の現在のビューモデルでのみ行います。しかし、私は取得しないことはgithubので、そのコードで
ビューモデルを通じてビューコントローラを接続する方法(または、あなたがすることを意図している場合でも)です:https://github.com/objcio/S01E05-connecting-view-controllers/blob/master/Example/AppDelegate.swift彼らは彼らの視野の中にこれを行うに使用
コントローラ
var didSelect: (Episode) ->() = { _ in }
これが実行されます。
同様に、ViewControllerを使用してViewModelをメニューボタンの押下(タグに依存)に使用したいと考えています。
マイコードが続きます。
struct MainMenuViewModel {
enum MainMenuTag: Int {
case newGameTag = 0
}
func menuButtonPressed(tag: Int) {
guard let tagSelected = MainMenuTag.init(rawValue: tag) else {
return
}
switch tagSelected {
case .newGameTag:
print ("Pressed new game btn")
break
}
}
func menuBtnDidPress(tag: Int) {
print ("You pressed: \(tag)")
// Do a switch here
// Go to the next view controller? Should the view model even know about navigation controllers, pushing, etc?
}
}
class MainMenuViewController: UIViewController {
@IBOutlet var mainMenuBtnOutletCollection: [UIButton]!
var didSelect: (Int) ->() = { _ in }
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func mainMenuBtnPressed(_ sender: UIButton) {
let tag = (sender).tag
self.didSelect(tag)
}
}
私は理解していないことである私は私のViewModel
AS内の機能
func menuButtonPressed(tag: Int)
にコマンド
self.didSelect(tag)
に接続するのですかIそれを理解する、合意迅速なトークビデオには、ビューコントローラが「普通」であり、ビューモデルがメニューボタンの押下のような主要なものをすべて処理し、必要に応じて異なるビューコントローラに移動するという考えがある。
didSelectアイテムをviewModel関数にどのように接続すればよいですか?
ありがとうございます。