迅速に、switch ステートメントの優れた機能を使用して、宛先ビュー コントローラーのタイプprepare(segue:)
に基づいてケースを作成できます。
例:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.destination {
case let detailViewController as DetailViewController:
detailViewController.title = "DetailViewController"
}
case let otherViewController as OtherViewController:
otherViewController.title = "OtherViewController"
}
}
しかし、セグエが分割ビュー コントローラーによってトリガーされ、宛先がナビゲーション コントローラーであり、本当にやりたいことは、ナビゲーション コントローラーのトップ ビュー コントローラーのクラスをオンにすることである場合はどうなるでしょうか。
私はこのようなことをしたい:
case let nav as UINavigationController,
let detailViewController = nav.topViewController as? DetailViewController:
//case code goes here
複数の部分のif let
オプションのバインディングで使用するのと同じ構造があります。
それはうまくいきません。代わりに、次のようなかなり面倒な構成を行う必要があります。
case let nav as UINavigationController
where nav.topViewController is DetailViewController:
guard let detailViewController = nav.topViewController as? DetailViewController
else {
break
}
detailViewController.title = "DetailViewController"
それは機能しますが、不必要に冗長に見え、意図がわかりにくくなります。Swift 3 でこのような switch ステートメントの場合、マルチパートのオプション バインディングを使用する方法はありますか?