如何使现有类成员成为协议实现



我的问题很简单。我有一个类来管理我所有的视图控制器到视图控制器过渡动画,它从协议中获取类,因为我想让它可移植,我通常使用项目特定的东西制作一个 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 中的viewUIView的强制解包,因此只需将协议定义为:

protocol AnimatedViewController {
    var view: UIView! { get set }
    func animateViews()
}

来自UIViewController view将用于满足该协议的要求。

例如:

class MyController: UIViewController, AnimatedViewController {
    func animateViews() {
        // do your stuff
    }
}

最新更新