有什么办法让segue.destinationViewController成为?判断一个UIViewControllers

时间:2015-11-17 05:04:39

标签: swift

我的代码目前是这样的:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if let des = segue.destinationViewController as? AURReportViewController {
            des.currentType = currentType
        }

        if let des = segue.destinationViewController as? AURAddBeanViewController {
            des.currentType = currentType
        }
    }

是否有同时在as? s之一中制作UIViewController

if let des = segue.destinationViewController as? (AURReportViewController || AURAddBeanViewController) {
            des.currentType = currentType
        }

2 个答案:

答案 0 :(得分:0)

尝试使用Nil Coalescing Operator。这个有用吗?

 if let des = segue.destinationViewController as? AURReportViewController ?? segue.destinationViewController as? AURAddBeanViewController {
        des.currentType = currentType
    }

答案 1 :(得分:0)

不,没有。这两种类型不会相互继承。 Swift是强类型的。在您的提案中,在if let内,des可以是两种不同类型中的一种。编译器没有设置为处理这种情况“在这个块中这个变量可能是AURAddBeanViewController,或者它可能是AURReportViewController(或者它可能是......等)”。编译器想要准确知道每个变量的类型。

现在,如果每个类符合共享协议HasCurrentType,则可以期望编译器理解“在此块中,此变量符合HasCurrentType”。类型安全规则受到尊重,编译器很满意。

Apple文档protocol conformance testing在“检查协议一致性”一节中,其中包含一个名为HasArea的示例。所以在你的情况下,if let des = segue.destinationViewController as? HasCurrentType ......