在 swift 中,您可以使用 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"
}
}
但是,如果 segue 是由拆分视图控制器触发的,那么目的地是导航控制器,而您真正想要做的是打开导航控制器的顶部视图控制器的类呢?
我想做这样的事情:
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 语句的情况下,有没有办法使用多部分可选绑定?