小编Rob*_*ris的帖子

仅当符合特定协议时,才对类进行Swift扩展

嗨那里=)我刚刚面临一个设计问题,我需要(基本上)做以下事情:

我要注入一些代码上viewWillAppear:任何UIViewController符合协议的子类MyProtocol.在代码中解释:

protocol MyProtocol
{
    func protocolFunction() {
        //do cool stuff...
    }
}

extension UIViewController where Self: MyProtocol //<-----compilation error
{
    public override class func initialize()
    {
        //swizzling stuff switching viewWillAppear(_: Bool) with xxx_viewWillAppear(animated: Bool)
    }

    //  MARK: - Swizzling

    func xxx_viewWillAppear(animated: Bool)
    {
        self.xxx_viewWillAppear(animated)

        //invoke APIs from  
        self.protocolFunction() // MyProtocol APIs
        let viewLoaded = self.isViewLoaded // UIViewController APIs

    }
}
Run Code Online (Sandbox Code Playgroud)

这里的主要问题是我需要UIVIewController扩展中的两件事:

  1. 调用两者MyProtocolUIViewControllerAPI
  2. 覆盖UIViewController方法initialize() …

uiviewcontroller ios swift swift-extensions swift-protocols

20
推荐指数
2
解决办法
6250
查看次数