swift – 为超类创建初始化器返回一个特定的子类?
发布时间:2020-12-14 04:57:40 所属栏目:百科 来源:网络整理
导读:参见英文答案 Custom class clusters in Swift????????????????????????????????????4个 我正在Swift中创建一个单元框架,它有不同单位的测量超类和子类,如Mass和Volume.一个功能是允许框架正确猜测它创建的单元并返回正确的类.示例代码: class Measurement
参见英文答案 >
Custom class clusters in Swift????????????????????????????????????4个
我正在Swift中创建一个单元框架,它有不同单位的测量超类和子类,如Mass和Volume.一个功能是允许框架正确猜测它创建的单元并返回正确的类.示例代码: 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 是否有可能让一个继承的类在初始化时创建特定子类的对象? Library在GitHub上命名为Indus Valley和开源 解决方法
它正在快速而松散地继承,让父类知道它的子类(非常差的反模式!)但这可行…
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |