【问题标题】:JSONModel not working with Swift arraysJSONModel 不适用于 Swift 数组
【发布时间】:2014-07-14 17:50:12
【问题描述】:

我在 Swift 中使用 JSONModel 时遇到了一些问题。

我正在尝试创建一个 ToDo 列表应用程序,该应用程序将保留一组项目,以便在关闭应用程序时保留 ToDo 项目。这是我使用的代码:

class ToDoItem: JSONModel {
    var name: String = ""
    var isCompleted: Bool = false
    var createdOn: NSDate = NSDate()
}

class ToDoList: JSONModel {
    var items: [ToDoItem] = []
}

我可以通过调用toJSONString()ToDoItem 转换为JSON,但同样的方法不适用于ToDoList,它返回nil。知道为什么会这样吗?

【问题讨论】:

  • 与您的问题无关,但我认为您需要在初始化中设置 createdOn。您当前拥有的内容将为每个 ToDoItem 使用相同的值(……至少我很确定 - 没有运行此代码)
  • 这些只是占位符值。我使用超类的 init,而不是手动填充值。我是 iOS 生态系统的新手,但这是您在 Java 中进行持久性时通常处理事情的方式。
  • 我仍然没有使用 Swift 测试 JSONModel。如果 Swift 中的东西相当不稳定,我想我会在实现 Swift 兼容性之前稍等片刻
  • Luka,你有没有设法解决这个问题?
  • 是的,通过编写我自己的序列化例程...上次我几周前检查时仍然无法让这个东西正常工作。

标签: json swift jsonmodel


【解决方案1】:

由于与 Obj-C 运行时支持的反射不兼容,JSONModel 不支持 Swift。 JSONModel 目前需要这种反射能力才能正确解析类型。 We are looking into alternative methods of defining the type mappings though.

具体来说,JSONModel 依赖于使用协议来确定集合类型中项目的类型,例如字典、数组等。在 Swift 中定义的协议在运行时不可见 - 阻止 JSONModel 正确反序列化集合类型。

目前,您有两种选择:

  1. 从 JSONModel 切换到另一个支持 Swift 的 JSON(反)序列化库
  2. 在 Objective-C 中定义模型

我知道这并不理想,但恐怕当前 JSONModel 行为无法解决问题。

【讨论】:

    【解决方案2】:

    如果你的数组是其他类的成员,你可以使用辅助方法。

    数据类

    @protocol Transaction
    @end
    
    @interface Transaction : JSONModel
      ...
    @end
    

    一个“包装”类

    @interface TransactionPage : JSONModel
    
    @property (strong, nonatomic) NSNumber* pageNumber;
    @property (strong, nonatomic) NSNumber* pageSize;
    @property (strong, nonatomic) NSNumber* totalRecords;
    @property (strong, nonatomic) NSNumber* totalPages;
    @property (strong, nonatomic) NSArray<Transaction>* records;
    
    - (NSArray<TphTransactionSummary*>*) recordsForSwift;  // <<< Helper method
    
    @end
    
    

    辅助方法的实现

    - (NSArray<TphTransactionSummary*>*) recordsForSwift {
        return self.records;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2015-01-22
      相关资源
      最近更新 更多