类簇

作者: fordring2008 | 来源:发表于2017-02-05 12:25 被阅读10次

    // 类簇

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

    相关文章

      网友评论

        本文标题:类簇

        本文链接:https://www.haomeiwen.com/subject/ovyjittx.html