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)

  

相关文章:

  • 2022-12-23
  • 2022-02-16
  • 2021-08-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-28
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2021-05-21
  • 2022-12-23
相关资源
相似解决方案