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里面就行了