/**
结构体 枚举
值类型的构造方法之间的调用
值类型的构造器代理
构造方法可以调用其他构造方法来完成实例的构造,称之为构造器代理。
好处:减少构造方法之间的代码重复。
*/
struct Segment {
var origin: Double
var end: Double
init(origin: Double, end: Double) {
self.origin = origin
self.end = end
}
init() {
origin = 0.0
end = 0.0
}
init(origin: Double, length: Double) {
// self.origin = origin
// self.end = origin + length
// 也可以写成这个
self.init(origin: origin, end: origin + length)
}
func description() -> String {
return "(\(origin), \(end))"
}
}
// 成员逐一构造器
var seg0 = Segment.init(origin: 0.0, end: 10.0)
var seg1 = Segment.init()
var seg2 = Segment.init(origin: 2.0, length: 10.0)
print(seg0.description())
print(seg1.description())
print(seg2.description())
// 如果是类的话, 前面加上 convenience
class Segment1 {
var origin: Double
var end: Double
init(origin: Double, end: Double) {
self.origin = origin
self.end = end
}
// 便利化初始化方法
convenience init(origin: Double, length: Double) {
self.init(origin:origin, end:origin + length)
}
}