Swift4 便利构造器(convenience)

先贴一个网上的例子

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

推荐阅读更多精彩内容

  • 构造过程 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置...
    蛊毒_阅读 739评论 0 2
  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 785评论 0 0
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 701评论 0 3
  • 佳茗 我热爱的广阔无际在这里出现。时至今日,语言总是有限的,一盏天明,一念缘起,在日出时,在月隐...
    佳茗tl阅读 603评论 0 1
  • 每次下班后在回去的路上总会听到有人说又一天就这么过了,曾经的梦想,曾经的理想都被现实给掩埋了,做任何的事都没有了当...
    这一刻我在乎阅读 258评论 1 0