使超类的初始化程序返回特定的子类?

这本书

我正在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift中的子类不会继承其超类的初始化程序

来自分类Dev

子类和超类中的重复初始化

来自分类Dev

在子类中初始化超类数组(java)

来自分类Dev

在子类中初始化超类对象

来自分类Dev

在超类初始化之前,子类最终进行静态初始化?

来自分类Dev

在超类初始化之前,子类最终进行静态初始化?

来自分类Dev

覆盖超类的指定初始化程序

来自分类Dev

是否可以从子类更新在超类中初始化的对象?

来自分类Dev

如何在子类的初始化中设置超类实例

来自分类Dev

为什么此超类在初始化期间不在子类中运行方法?

来自分类Dev

从超类初始化子类的类实例变量

来自分类Dev

从超类初始化子类的类实例变量

来自分类Dev

python超类初始化参数

来自分类Dev

UIViewController的子类所需的初始化程序

来自分类Dev

Python子类初始化程序参数

来自分类Dev

初始化子类时可访问超类的变量

来自分类Dev

实例化UISegementedControl的子类时,对类使用未实现的初始化程序'init(frame :)'

来自分类Dev

必须在Swift 1.2中调用超类'UIViewController'的指定初始化程序

来自分类Dev

在不同的swift文件中覆盖超类的默认初始化程序

来自分类Dev

必须在Swift 1.2中调用超类'UIViewController'的指定初始化程序

来自分类Dev

为什么默认情况下会调用超类指定的初始化程序?

来自分类Dev

swift 4 模型类错误:从初始化程序返回而不初始化所有存储的属性

来自分类Dev

在调用失败的初始化程序的子类上创建便捷的初始化程序

来自分类Dev

Ember-CLI:初始化程序和初始化程序子类

来自分类Dev

Ember-CLI:初始化程序和初始化程序子类

来自分类Dev

数组初始化程序返回什么?

来自分类Dev

在父类中使用的子类中初始化属性

来自分类Dev

对象工厂设计以初始化父类或子类对象

来自分类Dev

用子类型初始化父类中的对象

Related 相关文章

  1. 1

    Swift中的子类不会继承其超类的初始化程序

  2. 2

    子类和超类中的重复初始化

  3. 3

    在子类中初始化超类数组(java)

  4. 4

    在子类中初始化超类对象

  5. 5

    在超类初始化之前,子类最终进行静态初始化?

  6. 6

    在超类初始化之前,子类最终进行静态初始化?

  7. 7

    覆盖超类的指定初始化程序

  8. 8

    是否可以从子类更新在超类中初始化的对象?

  9. 9

    如何在子类的初始化中设置超类实例

  10. 10

    为什么此超类在初始化期间不在子类中运行方法?

  11. 11

    从超类初始化子类的类实例变量

  12. 12

    从超类初始化子类的类实例变量

  13. 13

    python超类初始化参数

  14. 14

    UIViewController的子类所需的初始化程序

  15. 15

    Python子类初始化程序参数

  16. 16

    初始化子类时可访问超类的变量

  17. 17

    实例化UISegementedControl的子类时,对类使用未实现的初始化程序'init(frame :)'

  18. 18

    必须在Swift 1.2中调用超类'UIViewController'的指定初始化程序

  19. 19

    在不同的swift文件中覆盖超类的默认初始化程序

  20. 20

    必须在Swift 1.2中调用超类'UIViewController'的指定初始化程序

  21. 21

    为什么默认情况下会调用超类指定的初始化程序?

  22. 22

    swift 4 模型类错误:从初始化程序返回而不初始化所有存储的属性

  23. 23

    在调用失败的初始化程序的子类上创建便捷的初始化程序

  24. 24

    Ember-CLI:初始化程序和初始化程序子类

  25. 25

    Ember-CLI:初始化程序和初始化程序子类

  26. 26

    数组初始化程序返回什么?

  27. 27

    在父类中使用的子类中初始化属性

  28. 28

    对象工厂设计以初始化父类或子类对象

  29. 29

    用子类型初始化父类中的对象

热门标签

归档