美文网首页
十八、Swift3.0之便利构造函数

十八、Swift3.0之便利构造函数

作者: ZhengYaWei | 来源:发表于2017-02-27 19:33 被阅读88次

    遍历构造函数在类别中使用比较常见,如在UIColor+Extension实现一个简单的遍历构造函数:

    extension UIColor {
        convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1.0) {
            self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: a)
        }
    }
    

    遍历构造函数目的:
    1、条件判断,只有满足条件,才实例化对象,可以防止造成不必要的内存开销
    2、简化对象创建
    3、本身不负责属性的创建和初始化工作

    遍历构造函数注意事项:
    1、使用convenience关键字
    2、便利构造函数允许返回nil

    • 正常的构造函数一定会创建对象
    • 判断给定的参数是否符合条件,如果不符合条件,直接返回nil,不会创建对象,减少内存开销。
      3、只用便利构造函数中,才能使用self.init 构造当前对象
    • 没有convenience关键字的构造函数式负责创建对象的,反之用来检查条件的,本身不负责对象的创建。
      4、注意init后面有?
      5、如果在遍历构造函数中使用当前对象的属性,一定要在self.init之后。
      6、在实际开发中写的很少,但是系统方法创建对象时有很多便利构造函数
    class Person: NSObject {
        
        var name: String?
        var age: Int = 0
        //遍历构造函数
        convenience init?(name: String,age: Int) {
            if age > 100{
                return nil
            }
            //实例化当前对象
            self.init()
            //代码执行到此 self才允许被访问,才能够访问到对象的属性
            self.name = name
        }
    }
    

    遍历函数的实际使用案例,使用遍历构造函数是抽取UITextField控件。创建一个Swift文件,命名为UITextField+extension,然后实现如下代码。

    //extension类似于OC中的Category
    extension UITextField{
        convenience init(placeholder: String?, fontSize: CGFloat = 14,frame: CGRect){
            //实例化当前对象
            self.init()
            //访问属性
            self.frame = frame
            self.borderStyle = .roundedRect
            self.placeholder = placeholder
            self.font = UIFont.systemFont(ofSize: fontSize)
        }
    }
    

    外部代码调用形式。

     let tf = UITextField(placeholder: "占位文本", fontSize: 15, frame: CGRect(x: 50, y: 100, width: 100, height: 30))
            view.addSubview(tf)
    

    相关文章

      网友评论

          本文标题:十八、Swift3.0之便利构造函数

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