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)的代码。