我在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
将toJSONString()
转换为JSON,但同样的方法不能与ToDoList
一起使用,它会返回nil。知道为什么会这样吗?
答案 0 :(得分:2)
由于与Obj-C运行时支持的反射不兼容,JSONModel不支持Swift。 JSONModel当前需要此反射能力才能正确解析类型。 We are looking into alternative methods of defining the type mappings though.
具体来说,JSONModel依赖于使用协议来确定集合类型中的项类型,例如字典,数组等.Swift中定义的协议在运行时不可见 - 防止JSONModel正确地反序列化集合类型。
目前,您有两种选择:
我知道这不太理想,但我担心当前的JSONModel行为无法解决方法。
答案 1 :(得分:0)
如果您的数组是其他某些类的成员,则可以使用辅助方法。
数据类
@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;
}