Swift 有没有办法将segue.destinationViewController设置为?判断其中一个控制器
我当前的代码如下所示:Swift 有没有办法将segue.destinationViewController设置为?判断其中一个控制器,swift,Swift,我当前的代码如下所示: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if let des = segue.destinationViewController as? AURReportViewController { des.currentType = currentType } if let des = seg
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
}
}
是否要同时在其中一个UIViewController
s中使成为?
if let des = segue.destinationViewController as? (AURReportViewController || AURAddBeanViewController) {
des.currentType = currentType
}
尝试使用零合并运算符。这个能用吗
if let des = segue.destinationViewController as? AURReportViewController ?? segue.destinationViewController as? AURAddBeanViewController {
des.currentType = currentType
}
不,没有。这两种类型不会相互继承。斯威夫特是强类型的。在您的提案中,在
if let
中,des
可以是两种不同类型中的一种。编译器未设置为处理以下情况:“在此块中,此变量可能是AuradBeanViewController或AURReportViewController(或可能是…等)”。编译器希望知道每个变量的确切类型
现在,如果每个类都符合一个共享协议HasCurrentType
,那么编译器可能会理解“在这个块中,这个变量符合HasCurrentType”。类型安全规则得到遵守,编译器也很高兴
苹果公司在“检查协议一致性”一节中提供了一个名为
HasArea
的示例。因此,在您的情况下,如果让des=segue.destinationViewController作为?HasCurrentType
…您可以使用该属性创建协议,并使视图控制器符合该协议。或者UIViewController的子类也是如此(例如,如果您想要UITableVC和UICollectionVC的子类,则不起作用)是的,它适用于该条件。但是有一个错误。继承是:auradbeanviewcontroller
和AURReportViewController
Base2ViewController``和AURReportViewController
都有一个属性:currentType
。这样,在您的回答中,错误是:“Base1ViewController
”类型的值没有成员“currentType”是的,首先它尝试将destinationViewController作为AURReportViewController查找,如果失败,则转到其他选项。这就是它的工作原理。:)但埃米利奥佩雷斯的建议也是好的。希望我的回答能对你有所帮助?AURReportViewController失败,应按以下方式进行?AuradBeanViewController,但AuradBeanViewController从Base2ViewController继承属性currentType
,为什么会出现此错误?此错误显示当第一条语句而不是第二条语句失败时,尝试交换两条语句并单击同一按钮。那你就可以知道了。因为第一个不是目标视图控制器,所以它显示此错误。但第二个条件是有效的,它不会显示任何错误。很抱歉,Silva,如果进入AURReportViewController,那么它也应该具有从Base2ViewController继承的currentType。为什么还没有成员“currentType”?谢谢你,格雷厄姆。我明白了。但是如果我使两个视图控制器都符合HasCurrentType
,如何更改此部分:如果让des=segue.destinationViewController为?(AuradBeanViewController | | AURReportViewController)的代码。