// 類簇
// 在 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)