首页 > 解决方案 > 控制子类是否符合基类中的协议是否合法、安全或有目的

问题描述

我想知道控制协议是否符合基类是否是一种好习惯。在我看来,这不是一个好习惯,因为基类应该包含所有应该与子类相关的属性和方法。并且基类不应该知道子类是否符合协议。

一个示例用法;

class BaseClass: UIViewController {
   override func viewDidLoad() {
       super.viewDidLoad()
       if let self = self as? SomethingAble {
          self.doIt()
       }
   }
 }

protocol SomethingAble {
   func doit()
}

谢谢,

标签: swift

解决方案


您有很多方法可以实现可选协议,因此其中一种:

首先: Swift 有一个特性叫做extension,它允许我们为那些我们希望是可选的方法提供默认实现。

protocol SomethingAble {
    func optionalMethod()
    func notOptionalMethod()
}

extension SomethingAble {

    func optionalMethod() {
        //this is a empty implementation to allow this method to be optional
    }
}

第二:

@objc protocol SomethingAble {
    @objc optional func optionalMethod()
}

推荐阅读