【发布时间】:2016-11-05 20:46:30
【问题描述】:
我在同一个 prepareForSegue 中有 2 个 segue,一个连接到 UIViewController 子类,另一个连接到 UICollectionViewController 子类。 我正在尝试使用具有多态性的开关/案例来设置我的destinationViewController,但是我在开关内所做的向下转换在它之外是不可见的,它一直将var视为最初声明的UIVC。我在这里做错了什么? 错误是“'UIViewController' 类型的值没有成员 'context'”
let identifier: String!
var destinationTest: UIViewController!
switch identifier {
case "Add Exercise":
destinationTest = segue.destination as! AddExerciseViewController
case "addExerciseInCollectionView":
destinationTest = segue.destination as! AddExerciseCollectionVC
default:
break
}
destinationTest.context = self.context
【问题讨论】:
-
destinationTest被声明为UIViewController,所以这就是变量的全部内容。它可能指向UIViewController的其他子类,但您将无法使用UIViewController变量访问任何特定于子类的属性/函数。仅供参考 - 这与使用switch无关。 -
对于您必须工作的代码,您的两个视图控制器类要么需要共享一个超类(或更好),要么实现一个引入
context属性的协议。然后,您可以使用该类/协议而不是UIViewController作为destinationTest的类型 -
好的,它们都继承自 UIViewController,但是,上下文属性是在 UIViewController 的第三个子类中声明的,它是同级子类。我现在明白了为什么即使在沮丧之后这两个控制器也看不到我的财产。我认为这是开关内部的范围问题,哈哈。非常感谢你们!!