Swift便利构造函数抽取控件创建方法

前言:在Swift中对于控件创建时的代码抽取类似于OC中的分类,接下来看看在Swift中是如何做的
举例—
#先创建几个并排的btn
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
       ///调用方法
        setupUI()
    }

    func setupUI() -> () {
        let btn1 = UIButton(type: .custom)
        btn1.setTitle("按钮1", for: .normal)
        btn1.setTitleColor(UIColor.orange, for: .normal)
        btn1.frame = CGRect(x: 50, y: 100, width: 100, height: 44)
       btn1.backgroundColor = UIColor.blue
       view.addSubview(btn1)
        
        let btn2 = UIButton(type: .custom)
        btn2.setTitle("按钮2", for: .normal)
        btn2.setTitleColor(UIColor.orange, for: .normal)
        btn2.frame = CGRect(x: 160, y: 100, width: 100, height: 44)
        btn2.backgroundColor = UIColor.blue
        view.addSubview(btn2)
        
        let btn3 = UIButton(type: .custom)
        btn3.setTitle("按钮3", for: .normal)
        btn3.setTitleColor(UIColor.orange, for: .normal)
        btn3.frame = CGRect(x: 270, y: 100, width: 100, height: 44)
        btn3.backgroundColor = UIColor.blue
        view.addSubview(btn3)
 }
以上代码就出现了重复冗余的代码,我们接下来来抽取一下
抽取—
#首先command + N 创建一个Swift.file 命名为UIButton + extension
#其次将import Foundation 改为 import UIKit

import UIKit
// extension 类似于OC中的 categary
extension UIButton {
    
    //便利构造函数
    convenience init(title : String , titleColor : UIColor , frame : CGRect, backgroundColor : UIColor) {
        //1.实例化当前对象—因为在便利构造函数中是不负责创建对象的,所以必须调用本身的构造函数来创建对象后,再做下面的事情
        self.init()
          //2.访问属性
        self.setTitle(title, for: .normal)
        self.setTitleColor(titleColor, for: .normal)
        self.frame = frame
        self.backgroundColor = backgroundColor
       }
}

//接下来再在ViewController中再创建一个按钮用便利构造方法
  let btn4 = UIButton(title: "按钮4", titleColor: UIColor.orange, frame:  CGRect(x: 50, y: 150, width: 100, height: 44)
, backgroundColor: UIColor.blue)
        view.addSubview(btn4)
//看起来就简单多了
#扩展—在Swift中函数可以传递默认值,对于我们写便利构造函数来创建多个类似属性控件时是一大便利,可以轻松实现控件的多属性组合
//给便利构造函数中的 backgroundColor属性设置一个默认值
    convenience init(title : String , titleColor : UIColor , frame : CGRect, backgroundColor : UIColor = UIColor.black)
//接下来创建按钮时就可以不传此参数
 let btn5 = UIButton(title: "按钮5", titleColor: UIColor.orange, frame: CGRect(x: 160, y: 150, width: 100, height: 44))
当然如果想要这个属性不是默认参数,直接传递就好



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,663评论 25 708
  • 嘿,Vvn,今天是12月的第一天,2016的最后一个月,没有什么特别的,我仍旧是在早上7点半醒来,骑车出去买早...
    无邪居阅读 214评论 0 0
  • 把船开到水深之处。(路5:4) 主今天也要我进入深处,多深他没有说。深的程度是看我们离岸——世界——有多远,我们的...
    我就是大怪兽阅读 969评论 0 2
  • 巜校徽》 这是一枚校徽,一枚小小的校徽, 看上去是一块易碎塑料材质,不起眼的小长方块,但精致得白里透...
    前行者1一常德一自由人阅读 646评论 0 2