美文网首页
Swift便利构造器---convenience

Swift便利构造器---convenience

作者: Smallwolf_JS | 来源:发表于2019-08-04 14:35 被阅读0次
    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);
    

    相关文章

      网友评论

          本文标题:Swift便利构造器---convenience

          本文链接:https://www.haomeiwen.com/subject/gscydctx.html