类簇

// 类簇

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

你可能感兴趣的:(类簇)