Swift学习记录 -- 18. 便利构造函数

23 篇文章 1 订阅

在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)
    }
}

//两种方法 , 大致相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值