我不确定这是否是Xcode 6特定于Swift的问题,但现在就这样了。
我有两个类,MyViewController和UtilViewController。 UtilViewController有一个类型为UIViewController的委托属性,因为UtilViewController被设计为供我所有应用程序的viewcontrollers使用。它还有一个函数createOrder(),它只能由MyViewController调用。因为这个函数只能由MyViewController调用,所以在createOrder()里面有一行调用MyViewController声明的函数,就像这样
self.delegate!.methodInMyViewController()
然而,这会在UtilViewController中引发错误
'UIViewController' does not have a member named 'methodInMyViewController'
如何保留具有UIViewController委托的模块性,还能够从我自己的viewcontrollers调用方法,它们是UIViewController的子类?
答案 0 :(得分:0)
您可以将您的委托转换为MyViewController,告诉编译器它实际上是一个MyViewController并且可以调用该方法。
(self.delegate! as MyViewController).methodInMyViewController()
由于委托可能并不总是MyViewController,您可能需要在转换之前检查它是否为:
if self.delegate! is MyViewController{
(self.delegate! as MyViewController).methodInMyViewController()
}
答案 1 :(得分:0)
而不是(ab)使用UtilViewController
的通用委托,createOrder()
方法可以采用闭包(回调)参数。例如:
func createOrder(callWhenDone:()->()) {
// do stuff ...
callWhenDone()
}
在MyViewController
内,您可以将方法称为
utilVC.createOrder {
// called from createOrder()
self.methodInMyViewController()
}