在OC中 , 我们通常会给一些系统的类增加分类 ,或者自定义类继承某个类, 从而为系统类增加一些方法 , 成为工具类 或者小助手 ,全局使用 , 方便咱们写项目 . 在swift中 , 新增了一种语法 , 便是便利构造函数 , 其作用与用法 , 大致和分类相差无几.
例如:
当我们想给导航栏设置自定义按钮时 , 难免会出现许多重复性代码 , 相当冗长 , 也许一个项目中可能会定义几十个UIBarbuttonItem . 在OC中 , 我们的做法要么给UIBarbuttonItem写一个分类 , 提供一个返回 UIBarbuttonItem的方法 , 要么写一个工具类继承NSObject , 从寓意来讲 , UIBarbuttonItem分类会更好一些 . swift中 , 便用到了便利构造函数如下 :
//此时代码已经够多了 ,更何况真正开发中远不止一个控制器
func setUpNavigationBarItems() -> Void {
//左边按钮
let button = UIButton(type: .custom)
button.setImage(UIImage.init(named: "tabbar_profile"), for: .normal)
button.setImage(UIImage.init(named: "tabbar_profile_selected"), for: .highlighted)
button.sizeToFit()
let leftButton = UIBarButtonItem.init(customView: button)
navigationItem.leftBarButtonItem = leftButton
//右边按钮
let button1 = UIButton(type: .custom)
button1.setImage(UIImage.init(named: "music_icon_list_highlighted"), for: .normal)
button1.setImage(UIImage.init(named: "music_icon_list_highlighted"), for: .highlighted)
button1.sizeToFit()
let rightButton = UIBarButtonItem.init(customView: button1)
navigationItem.rightBarButtonItem = rightButton
//便利构造函数使用后:
//左边按钮
navigationItem.leftBarButtonItem = UIBarButtonItem.init(normalImage: "tabbar_profile", highImage: "tabbar_profile_selected", target: self,actionEvent:"itemTouchEvent")
//右边按钮
navigationItem.rightBarButtonItem = UIBarButtonItem.init(normalImage: "music_icon_list_highlighted", highImage: "music_icon_list_highlighted", target: self,actionEvent:"itemTouchEvent")
//点击事件
extension HomeViewController {
func itemTouchEvent() -> Void {
print("点击事件")
}
}
//便利构造函数
//方法一:
import UIKit
//comman + N --> swift File -->名称自拟
extension UIBarButtonItem {
//遍历构造函数
convenience init(normalImage:String,highImage:String,target:AnyObject,actionEvent:Selector){
//此处注意 , 必须先进行初始化
self.init()
let button = UIButton(type: .custom)
button.setImage(UIImage.init(named: normalImage), for: .normal)
button.setImage(UIImage.init(named: highImage), for: .highlighted)
button.addTarget(target, action: actionEvent, for: .touchUpInside)
button.sizeToFit()
self.customView = button
}
}
//方法二:
import UIKit
//
extension UIBarButtonItem {
//遍历构造函数
convenience init(normalImage:String,highImage:String,target:AnyObject,actionEvent:Selector){
let button = UIButton(type: .custom)
button.setImage(UIImage.init(named: normalImage), for: .normal)
button.setImage(UIImage.init(named: highImage), for: .highlighted)
button.addTarget(target, action: actionEvent, for: .touchUpInside)
button.sizeToFit()
self.init(customView:button)
}
}
//两种方法 , 大致相同