2

我在 Swift 中使用 JSONModel 时遇到了一些麻烦。

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

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

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

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

4

2 回答 2

2

由于与 Obj-C 运行时支持的反射不兼容,JSONModel 不支持 Swift。JSONModel 目前需要这种反射能力才能正确解析类型。不过,我们正在研究定义类型映射的替代方法。

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

目前,您有两种选择:

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

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

于 2016-01-12T11:40:01.050 回答
-1

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

数据类

@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;
}
于 2020-09-04T06:17:59.557 回答