swift可选协议

swift是面向协议编程的。。。但是我在这实现的过程中,有一个过不去的坎---那就是,OC里面有可选协议,但是swift的是明确,协议是必须实现的。这个百度了一下,出现了很多,但是答案就是用@objc链接到OC。。。然后在使用可选协议,但是这个做法不简洁,不像swift。。。
然后我自己琢磨了协议以及extension,实现了swift的可选协议。
那就是我们定义一个协议,把必须实现的协议直接写在协议本体里面,然后可选协议写在协议的extension里面。
看代码:

/**
 *  导航栏协议
 */
protocol NaviItemManager {}

extension NaviItemManager where Self: UIViewController {
    /**
     返回上一界面---默认pop
     */
    func disMissMenuItemManager() {
        let item = BlockMenuBarItem(image: UIImage.imageWithName(NaviItemImages.Back.rawValue, model: .AlwaysOriginal), style: .Done) {
            self.navigationController?.popViewControllerAnimated(true)
        }
        navigationItem.leftBarButtonItem = item
    }
    
    /**
     查看客服--默认
     */
    func checkKeFuItemManager() {
        let item = BlockMenuBarItem(image: UIImage.imageWithName(NaviItemImages.Kefu.rawValue, model: .AlwaysOriginal), style: .Done) {
            HCM_HomeRootViewModel().gotoWebView(WebType.Kefu, at: self)
        }
        navigationItem.rightBarButtonItem = item
    }
}

这个是我app里面的代码的一部分,这两个协议因为放在extension里面,所以他们都是可选的。
然后调用的时候,我们就不用全部都准守了。

extension CardController: NaviItemManager {
    private func setUpUI() {
       title = "身份证认证"
        disMissMenuItemManager()
    }
}

那么,假如说,有必须实现的协议的话就直接放在本体里面,不要写在协议的extension里面就行了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容