码迷,mamicode.com
首页 > 编程语言 > 详细

swift里类方法和构造方法的使用来减少代码冗余提高开发效率

时间:2017-11-14 14:39:39      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:类方法   尺寸   width   添加   create   ram   效率   日常   custom   

对于日常中重复性的可以抽取的实现尽量抽取 比如实现导航栏右侧

UIBarButtonItem的添加 如果使用

    private func setupNavigateionBar(){

        let btn = UIButton()

        btn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        btn.sizeToFit()

        navigationItem.leftBarButtonItem = UIBarButtonItem(customView:btn)

        

        //右侧导航栏设置多个功能item

        let firstbtn = UIButton()

        firstbtn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        firstbtn.setImage(UIImage(named:"icon_shouye_on"), for: .highlighted)

        //使用sizetofit会根据图片的大小动态适应改变item大小 要想自定义btn大小需使用自定义的size改变相邻按钮的间隔

        let size = CGSize(width: 40, height: 40)

        firstbtn.frame = CGRect(origin: CGPoint.zero, size: size)

 

        let firstRightItem = UIBarButtonItem(customView:firstbtn)

        

        let secondbtn = UIButton()

        secondbtn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        secondbtn.setImage(UIImage(named:"icon_shouye_on"), for: .highlighted)

        secondbtn.sizeToFit()

        let secondRightItem = UIBarButtonItem(customView:secondbtn)

 

        let thirdbtn = UIButton()

        thirdbtn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        thirdbtn.setImage(UIImage(named:"icon_shouye_on"), for: .highlighted)

        thirdbtn.sizeToFit()

        let thirdbtnRightItem = UIBarButtonItem(customView:thirdbtn)

        navigationItem.rightBarButtonItems = [firstRightItem, secondRightItem, thirdbtnRightItem]

 

        

    }

实现添加三个右侧的导航栏Item 代码冗余比较严重就可以分别通过实现类方法和构造方法两种方式来实现抽取。

一、使用类方法

1.新建一个UIBarButtonItem-extension.swift文件

import UIKit

 

extension UIBarButtonItem{

    //扩展一个类方法

    class func createItem(imageName:String, highImageName : String,size : CGSize) ->UIBarButtonItem{

        let btn = UIButton()

        btn.setImage(UIImage(named: imageName), for: .normal)

        btn.setImage(UIImage(named: highImageName), for: .highlighted)

        btn.frame = CGRect(origin:CGPoint.zero, size:size)

        

        return UIBarButtonItem(customView:btn)

    }

}

上面的冗余方法即可优化为:

 let firstRightItem = UIBarButtonItem.createItem(imageName: "icon_shouye_off", highImageName: "icon_shouye_on", size: size)//UIBarButtonItem(customView:firstbtn)

二、使用构造函数方法

   //使用构造函数的方式实现上面的功能

    //便利构造函数 1>必须以convenience开头 2>在构造函数中必须明确调用一个设计的构造函数,并且是self来调用的(self)3.构造函数不需要返回值

    convenience init(imageName : String, highImageName: String, size : CGSize) {

        let btn = UIButton()

        btn.setImage(UIImage(named: imageName), for: .normal)

        btn.setImage(UIImage(named: highImageName), for: .highlighted)

        btn.frame = CGRect(origin:CGPoint.zero, size:size)

        

        self.init(customView: btn)

    

    }

  上面的冗余方法即可优化为:  let secondRightItem = UIBarButtonItem(imageName : "icon_shouye_off", highImageName: "icon_shouye_on", size : size)///UIBarButtonItem(customView:secondbtn)

继续优化给构造函数参数添加默认参数及逻辑判断

    convenience init(imageName : String, highImageName: String = "", size : CGSize = CGSize.zero) {

        //1.创建button

        let btn = UIButton()

        //2.设置button图片

        btn.setImage(UIImage(named: imageName), for: .normal)

        if highImageName != ""{

         btn.setImage(UIImage(named: highImageName), for: .highlighted)

        }

       //3.设置button的尺寸

        if size == CGSize.zero

        {

            btn.sizeToFit()

        }else{

         btn.frame = CGRect(origin:CGPoint.zero, size:size)

        }

       

        //4.创建UIbarbuttonItem

        self.init(customView: btn)

    

    }

左侧的按钮可以优化为

 navigationItem.leftBarButtonItem = UIBarButtonItem(imageName:"icon_shouye_off")//UIBarButtonItem(customView:btn)

 

swift里类方法和构造方法的使用来减少代码冗余提高开发效率

标签:类方法   尺寸   width   添加   create   ram   效率   日常   custom   

原文地址:http://www.cnblogs.com/lzxpythonhome/p/7831768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!