我的问题很简单。我有一个类来管理我所有的视图控制器到视图控制器过渡动画,它从协议中获取类,因为我想让它可移植,我通常使用项目特定的东西制作一个 baseviewcontroller。
协议是这样的:
protocol AnimatedViewController {
var view: UIView { get set }
func animateViews()
}
但是当我让UIViewController
从中继承时,我会收到未定义view
的错误。当我定义它时,它告诉我它已经定义过了。
如何在协议中定义view
,并使其成为UIViewController
中已经定义的view
?
PS:真的不知道如何命名标题,所以欢迎编辑。
您可以在协议中使用 where 子句,并且不需要view
属性。
protocol AnimatedViewController where Self:UIViewController {
func animateViews()
}
class TVC : UIViewController, AnimatedViewController {
func animateViews() {
}
}
UIViewController
中的view
是UIView
的强制解包,因此只需将协议定义为:
protocol AnimatedViewController {
var view: UIView! { get set }
func animateViews()
}
来自UIViewController
view
将用于满足该协议的要求。
例如:
class MyController: UIViewController, AnimatedViewController {
func animateViews() {
// do your stuff
}
}