【问题标题】:How can I make an existing class member be a protocol implementation?如何使现有的类成员成为协议实现?
【发布时间】:2023-04-01 16:08:01
【问题描述】:

我的问题很简单。我有一个类来管理我的所有视图控制器到视图控制器的过渡动画,它从协议中获取类,因为我想让它可移植,而且我通常使用特定于项目的东西制作一个 baseviewcontroller。

协议是这样的:

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

但是当我让一个UIViewController 继承这个时,我得到了view 没有定义的错误。当我定义它时,它告诉我它已经定义了。

如何在我的协议中定义view 并让它成为UIViewController 中已经定义的view

PS:实在不知道如何命名标题,所以欢迎编辑。

【问题讨论】:

    标签: ios swift inheritance swift-protocols


    【解决方案1】:

    您可以在协议中使用 where 子句,并且不需要 view 属性。

    protocol AnimatedViewController where Self:UIViewController {
        func animateViews()
    }
    
    class TVC : UIViewController, AnimatedViewController {
        func animateViews() {
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      UIViewController 中的view 是一个未包装的UIView,因此只需将您的协议定义为:

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

      UIViewController 中的view 将用于满足此协议的要求。

      例如:

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

      【讨论】:

        猜你喜欢
        • 2018-12-31
        • 2019-08-17
        • 2022-12-12
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多