它允许您从init调用中返回子类。
init
我正在尝试找出使用Swift实现相同功能的最佳方法。
我确实知道,很可能有一种更好的方法可以用Swift实现相同的目的。但是,我的类将由我无法控制的现有Obj- C库初始化。因此,它确实需要以这种方式工作并且可以从Obj-C调用。
任何指针将不胜感激。
我不相信Swift可以直接支持这种模式,因为初始化程序不会像在Objective C中那样返回值-因此,您将没有机会返回替代对象实例。
您可以将类型方法用作对象工厂-一个相当人为的示例是-
class Vehicle { var wheels: Int? { get { return nil } } class func vehicleFactory(wheels:Int) -> Vehicle { var retVal:Vehicle if (wheels == 4) { retVal=Car() } else if (wheels == 18) { retVal=Truck() } else { retVal=Vehicle() } return retVal } } class Car:Vehicle { override var wheels: Int { get { return 4 } } } class Truck:Vehicle { override var wheels: Int { get { return 18 } } }
主Swift
let c=Vehicle.vehicleFactory(4) // c is a Car println(c.wheels) // outputs 4 let t=Vehicle.vehicleFactory(18) // t is a truck println(t.wheels) // outputs 18