我的代码目前是这样的:
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
}
答案 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
......