Ios 如何将控制器强制转换为特定协议,而不是Swift中的类?
这是我的Ios 如何将控制器强制转换为特定协议,而不是Swift中的类?,ios,swift,protocols,segue,Ios,Swift,Protocols,Segue,这是我的协议: protocol DBViewAnimationTransitioning { var viewForAnimation: UIView? { get set } } prepareforsgue:中的用法示例: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if let controller = segue.destinationViewControl
协议
:
protocol DBViewAnimationTransitioning {
var viewForAnimation: UIView? { get set }
}
prepareforsgue:
中的用法示例:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let controller = segue.destinationViewController as? DBViewAnimationTransitioning {
controller.viewForAnimation = sender as? UIView //cannot assign to to viewForAnimation in controller
}
}
当我向特定的控制器f.e.DBFindViewController
转换时,一切都很好。但我需要将其转换为特定的协议
而不是类
。如何做到这一点
您只能使用@objc协议检查协议一致性(包括is
、as
和as?
)
因此,解决方案很简单:
@objc protocol DBViewAnimationTransitioning {
var viewForAnimation: UIView? { get set }
}
或:
因为协议不是专门针对类/结构的,所以它无法分配某些内容,因为它可能是一个结构,因为它是复制的,所以没有意义。尝试将其声明为类协议,如protocol dbviewmanimationtransitioning:class
protocol DBViewAnimationTransitioning: class {
var viewForAnimation: UIView? { get set }
}