2019/06/10

WWDCのチケットは外れました。
WWDCに行きそびれた、開発運用部エンジニアのHです。

 

先日アメリカで行われたWWDC。
SwiftUIやCombine、ダークモード対応など、魅力的な機能が多数発表されました。

 

そんなWWDCですが、個人的に気になった機能として、
XCode11より加わるIBSegueActionについてスポットを当てたいと思います。

 

IBSegueActionはXcode 11に追加された機能で、
StoryboardでViewControllerからViewControllerへの遷移時、
遷移先のViewControllerのinit処理を遷移元で書くことができます。

 

これまではViewControllerからViewControllerへの遷移というと、
遷移元ViewControllerから遷移先ViewControllerへsegueを作成し、
prepareで遷移先ViewControllerのプロパティに対して必要な値を設定する、また、遷移先では暗黙的アンラップ型としてプロパティを用意しておくと言った手続きが必要でした。

 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destViewController = segue.destination as! DestViewController
        destViewController.text = "Hello, IBSegueAction"
    }

 


これをIBSegueActionを使うことによって、Segueから任意のイニシャライザを使ってViewControllerを生成し、遷移することができるようになりました。

まず、@IBSegueActionメソッドを、遷移元ViewControllerに用意します。

 

    @IBSegueAction
    func makeDestViewController(coder: NSCoder, sender: Any?, segueIdentifier: String?) -> UIViewController? {
    }

 

IBSegueActionメソッドは、遷移先ViewControllerの任意のイニシャライザでViewcontrollerを作成し、これを返します。

 

    @IBSegueAction
    func makeDestViewController(coder: NSCoder, sender: Any?, segueIdentifier: String?) -> UIViewController? {
        DestViewController(coder: coder, text: "Hello, IBSegueAction")
    }


あとは、Storyboard上からSegue Actionを先ほど用意したIBSegueActionに紐付けるだけです。
紐付けにはXcode右側のインスペクタ、Segue Actionのinstantiationを使うと便利でしょう。

 

以上、駆け足ですがIBSegueActionについて説明させていただきました。
ちなみにIBSegueActionをiOS12以下で動作させようとするとクラッシュするのでご注意ください。

 

 

※Amaziaでは一緒にマンガBANG!を作ってくれるエンジニアを募集しています。
詳しくは採用情報をご覧ください。