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

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

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)

时间: 2024-08-01 16:35:00

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

swift 里 1..2 和 1...2 的区别【chinaswift】

摘自:http://chinaswift.me/forum/2/49 swift 里 1..2 和 1...2 的区别[chinaswift],布布扣,bubuko.com

Swift里performSelector方法的替代

最近在回答StackOverflow的问题时,发现performSelector方法在Swift被去掉,Apple的注释是这个方法被去掉是因为不安全: NOTE The performSelector: method and related selector-invoking methods are not imported in Swift because they are inherently unsafe. 如果在Swift调用这个方法会编译出错: 'performSelector' is

在Swift里使用AFNetworking方法

在OC里使用惯了AFNetworking,比较喜欢这一个第三方库,在别的途径里得知可以在Swift里使用AFNetworking.但是那个时候我不知道具体的操作是怎样的,于是我只能去百度.GOOGLE了,还好让我给找到了答案,因而在这里和大家分享一下. 1.首先把下载好的AFN库直接拖到工程中 2.这里把Copy item if needed这个选项勾上,然后点完成 3.这时会有一个弹出框,点击YES 4.这个是拖拽好的截图,你会发现多了一个Header文件,也就是图中高亮的那个文件了.因为我的

Swift 里 Set(五)Adding & Removing Elements

Adding Elements internal func _unsafeInsertNew(_ element: __owned Element) { _internalInvariant(count + 1 <= capacity) let hashValue = self.hashValue(for: element) if _isDebugAssertConfiguration() { // In debug builds, perform a full lookup and trap

Swift学习笔记(一)搭配环境以及代码运行成功

原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹果以后大力推广的语言哦! 2.Swift给你带来什么机会? 当初你觉得objc太难,学ios学到一半放弃拉,或者进入it行业大家都搞android,你也搞android去了.现在你终于有机会和搞ios的站在一个语言的起跑线上,兄弟!swift传说很容易学哦,搞android的你想不想增加一下本领?提

如何在Swift里用UnsafeMutablePointer

下午在适配iPadUI的时候,用到了UIPopoverPresentationController,然后在转屏的时候需要调用UIPopoverPresentationControllerDelegate来返回一个适配后的view和CGRect,这里先看下在OC里的写法: - (void)popoverPresentationController: (nonnull UIPopoverPresentationController *) popoverPresentationController w

Java里的构造函数(构造方法)

构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载. 一, 构造函数的特点: 构造函数的主要作用是完成对象的初始化工作,(如果写的类里面没有构造函数,那么编译器会默认加上一个无参数且方法体为空的构造函数).它能够把定义对象时的参数传给对象的域.意即当创建一个对象时,这个对象就被初始化.如果这时构造函数不为空,则会在

Swift 吐槽下Swift里一个逼死强迫症的语法:中缀语法

中缀语法是OC里特有的一种,就是在函数的参数前面加一个解释词,让调用的时候明白该参数的含义 比如: -(void)processDataWithparamaA:(NSString *)paramaA paramaB:(NSString *)paramaB{ } 调用的时候: [self processDataWithparamaA:@"A" paramaB:@"B"]; 不过你发现没,这中缀语法的前提是你必须在函数名的最前面,写个With啥的说明第一个参数的名字,否

Java中实例方法、类方法和构造方法

类方法,有static修饰符,典型的主函数public static void main(String[] args){} 实例方法,就是一般的方法 构造方法,没有返回值(就是连void都没有),方法名与类名一样 public class Test{public static void myMethod();//类方法public void myMethod2();//实例方法public Test(){}//构造方法,没有返回值,方法名与类名一样}