我正在Swift中制作一个单元框架,该框架具有针对不同单位(例如质量和体积)的度量超类和子类。一个功能是允许框架正确猜测它是用哪个单元创建的,并返回正确的类。示例代码:
class Measurement {
var unitString : String
init(unknownUnit: String) {
// checks if the unit is either Volume or Mass, and returns an instance of that class
}
}
class Volume : Measurement {
init(unitString: String) {
}
}
class Mass : Measurement {
init(unitString: String) {
}
}
let mass = Mass("kg") // class: Mass
let volume = Volume("ml") // class: Volume
let shouldBeVolume = Measurement("ml") // class: Volume
let shouldBeMass = Measurement("kg") // class: Mass
继承的类在初始化时是否可以创建特定子类的对象?
库名为Indus Valley,并在GitHub上开源
它通过父类了解其子类(非常差的反模式!)来进行继承的快速和松散的操作,但这可以工作...
class Measurement {
var unitString : String
class func factory(unknownUnit: String) -> Measurement {
if unknownUnit == "kg" {
return Mass(myUnit: unknownUnit)
} else { // Random default, or make func return Measurement? to trap
return Volume(myUnit: unknownUnit)
}
}
init(myUnit: String) {
// checks if the unit is either Volume or Mass, and returns an instance of that class
self.unitString = myUnit
}
}
class Volume : Measurement {
}
class Mass : Measurement {
}
let mass = Mass(myUnit: "kg") // class: Mass
let volume = Volume(myUnit: "ml") // class: Volume
let shouldntBeVolume = Measurement(myUnit: "ml") // class: Measurement
let shouldntBeMass = Measurement(myUnit: "kg") // class: Measurement
let isVolume = Measurement.factory("ml") // class: Volume
let shouldBeMass = Measurement.factory("kg") // class: Mass
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句