控制子类是否符合基类中的协议是合法,安全还是有目的的

时间:2018-12-31 11:17:22

标签: swift

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

用法示例;

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

protocol SomethingAble {
   func doit()
}

谢谢

2 个答案:

答案 0 :(得分:3)

我认为,您可以使用自定义delegate变量

 class myViewController: UIViewController {

      var customDelegate : UIViewController?
      .
      .
      .
      override func viewDidLoad() {
          super.viewDidLoad()

          if delegate is MainVC {
              //do what you want.
          } else {
              // git la burdan ;) 
          }
      }
   .
   .
   }

答案 1 :(得分:2)

您可以通过多种方式来实现可选协议,因此其中一种:

第一: Swift具有称为39的功能,该功能使我们能够为那些我们希望是可选的方法提供默认实现。

extension

第二:

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

extension SomethingAble {

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