【问题标题】:Swift ObjectMapper: Map array of objects that inherit from base objectSwift ObjectMapper:映射从基础对象继承的对象数组
【发布时间】:2017-03-15 14:22:18
【问题描述】:

我有一个像这样的基础父对象:

class A: Mappable {
    var x: String!
    ...
}

还有它的两个孩子:

class Child1: A {
    var y: Int!
    ...
}

class Child2: A {
    var z: String?
}

这一切都很好而且很花哨,但是当我有一个表示从 A 继承的对象数组的对象时会发生什么,例如:

class Wrapper: Mappable {
    var objcs: [A]? // A will always be either Child1 or Child2, never A directly
}

我该如何处理这种情况? (小细节,我还需要能够使用 Obj-c 中的 Wrapper,没有添加注释和 NSObject 继承以避免冗长)

【问题讨论】:

  • 真正的问题是什么?
  • 问题在于库不会将 Wrapper 中的对象识别为可能的 Child1 或 ChildB 类型,而是将它们全部转换为 A。
  • 为什么会有问题?这是标准的面向对象编程。查找继承和覆盖
  • 我认为你没有理解我的问题 JeremyP。我的问题不是缺乏 OO 编程知识,而是缺乏关于在 ObjectMapper 中正确投射对象的挂钩位置的知识。我为任何可能感兴趣的人添加了答案。
  • 如果您必须查看对象内部才能找出它是什么,那就是代码异味。您的设计可能需要重新审视。

标签: swift objectmapper


【解决方案1】:

我设法解决了这个问题,所以我把它留给后代,以防有人遇到这个问题:

我必须实现一个自定义的 TransformType(ObjectMapper 库的一个协议),它采用 [Any] 的列表并根据 Any 的内部结构将它们独立转换为 Child1 或 Child2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2011-03-03
    • 2012-11-27
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多