搜索
您的当前位置:首页正文

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))
当然如果想要这个属性不是默认参数,直接传递就好



Top