• Swift中的便利构造器和构造器链


    import UIKit
    
    // 1.一个类中至少有一个指定构造器, 其必须负责初始化类中所有的实例存储属性
    // 2.便利构造器属于次要的, 辅助性的构造器
    // 3.类中可以不定义便利构造器, 便利构造器必须调用同一个类中的其他构造器完成初始化
    // 4.便利构造器的语法格式 convenience init(形参) {}
    // 5.只有类中才有便利构造器
    
    // 类的构造器链
    // Swift对构造器之间的调用链制定了如下3条规则:
    // 1.子类构造器必须调用直接父类的指定构造器(如果有乳类)
    // 2.便利构造器必须调用同一个类中的其他构造器
    // 3.便利构造器调用的高早期链的最终节点必须是指定构造器
    
    // 简化为:
    // 1.指定构造器总是向上代理(调用父类构造器)
    // 2.便利构造器总是横向代理(调用当前类的其他构造器)
    
    class Person {
        
        var name: String!
        var weight: Double
        
        // 定义指定构造器
        init(name: String, weight: Double) {
            self.name = name
            self.weight = weight
        }
        
        // 定义便利构造器(使用convenience修饰)
        convenience init(n name: String, w weight: Double) {
            self.init(name: name, weight: weight)
        }
    }
    
    var p1 = Person(name: "Rinpe", weight: 62.0)
    var p2 = Person(n: "Lili", w: 50.0)
    

      

  • 相关阅读:
    dts--framework(三)
    dts--tests(三)
    dts--tests(一)
    dts--framework(二)
    dts--framework(一)
    Fiddler(一)
    javascript(二)
    javascript(一)
    scrapy--selenium(二)
    linux安装vmware出现kernel-header问题
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5188847.html
Copyright © 2020-2023  润新知