Swift便利构造器---convenience

2019-08-04  本文已影响0人  Smallwolf_JS
import UIKit
extension UIButton{
    //swit中类方法是以class开头的方法,类似于oc中+开头的方法
    class func createButton(imageName:String,bgImageName:String)->UIButton{
        let btn=UIButton()
        btn.setImage(UIImage(named:imageName), for: .normal)
        btn.sizeToFit()
        return btn
    }
    
    /*
     convenience:便利,使用convenience修饰的构造函数叫做便利构造函数
     便利构造函数通常用在对系统的类进行构造函数的扩充时使用。
     便利构造函数的特点:
     1、便利构造函数通常都是写在extension里面
     2、便利函数init前面需要加载convenience 
     3、在便利构造函数中需要明确的调用self.init()
     */
    convenience init(imageName:String,bgImageName:String){
        self.init()
        setImage(UIImage(named:imageName), for: .normal)
        setBackgroundImage(UIImage(named:bgImageName), for: .normal)
        sizeToFit()
    }
便利构造器不仅可以用在extension里面,同样也可以用在类里。
class InitViewController: UIViewController {
    convenience init(_ name: String) {
        //这里也是要明确调用self.init()
        self.init()
        self.username = name;
    }
    
    //定义一个存储属性,属性声明最好加一个感叹号,这是因为:如果重写了init方法,不加感叹号的属性都要在init方法中赋值,否则编译报错,加个感叹号就可以在init方法中不初始化该属性。
    var username : String!
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.purple
        
        if let username = self.username {
            print(username)
        }
    }
}
//这里构造函数即可以带参数也可以不带参数
let ctrl = InitViewController()
//let ctrl = InitViewController("Coder")
self.present(ctrl, animated: true, completion: nil);
上一篇下一篇

猜你喜欢

热点阅读