// 类簇
// 在 OC 中, init开头的初始化方法所做的和其他方法并没有很大不同,只是将 self 进行了替换,即根据传入的参数返回 适合的私有子类对象 即可。
// Swift 中的初始化方法 init 才是真正的初始化,我们只能得到当前类的实例,并且要完成所有配置(对所有属性进行初始化, 当然 Optional 和有默认值的属性不用).
// 也就是说,对一个公共类来说,是不可能再初始化方法中返回子类的信息的
// 对于 Swift 中类簇的构建,一种有效的方法就是使用工厂方法进行。即不通过 init:返回子类对象
class Drinking {
typealias LiguidColor = UIColor
var color : LiguidColor {
return .clear
}
class func drinking(name: String) -> Drinking {
var drinking : Drinking
switch name {
case "Coke":
drinking = Coke()
default:
drinking = Beer()
}
return drinking
}
}
class Coke: Drinking {
override var color: LiguidColor{
return .black
}
}
class Beer: Drinking {
override var color: LiguidColor {
return .yellow
}
}
let coke = Drinking.drinking(name: "Coke")
print(coke.color)
let beer = Drinking.drinking(name:"Beer")
print(beer.color)
let cokeClass = NSStringFromClass(type(of: coke))
print(cokeClass)
let beerClass = NSStringFromClass(type(of: beer))
print(beerClass)
网友评论