2017-07-25 3 views
0

私はビデオシリーズを見ています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関数にどのように接続すればよいですか?

ありがとうございます。

答えて

1

あなたはここのようなあなたのためのコントローラdidSelectプロパティを設定する必要があります。

func showEpisode(episode: Episode) { 
    let detailVC = storyboard.instantiateViewControllerWithIdentifier("Detail") as! DetailViewController 
    detailVC.episode = episode 
    detailVC.didSelect = { episode in 
     // do whatever you need 
     // for example dismiss detailVC 
     self.navigationController.popViewController(animated: true) 
     // or call the model methods 
     self.model.menuButtonPressed(episode) 
    } 
    navigationController.pushViewController(detailVC, animated: true) 
} 
関連する問題