-
Notifications
You must be signed in to change notification settings - Fork 678
基本类型
xuyecan edited this page Sep 12, 2017
·
3 revisions
要支持从JSON串反序列化,Model定义时要声明服从HandyJSON协议。
服从HandyJSON协议,需要实现一个空的init方法。
class BasicTypes: HandyJSON {
var int: Int = 2
var doubleOptional: Double?
var stringImplicitlyUnwrapped: String!
required init() {}
}
let jsonString = "{\"doubleOptional\":1.1,\"stringImplicitlyUnwrapped\":\"hello\",\"int\":1}"
if let object = BasicTypes.deserialize(from: jsonString) {
// …
}对于声明为struct的Model,由于struct默认提供了空的init方法,所以不需要额外声明。
struct BasicTypes: HandyJSON {
var int: Int = 2
var doubleOptional: Double?
var stringImplicitlyUnwrapped: String!
}
let jsonString = "{\"doubleOptional\":1.1,\"stringImplicitlyUnwrapped\":\"hello\",\"int\":1}"
if let object = BasicTypes.deserialize(from: jsonString) {
// …
}如果希望尽量减少对原有代码的改动,那么可以通过Swift extension机制服从HandyJSON协议。如:
class Model {
var type: MyEnumType?
required init() {}
}
extension Model: HandyJSON {
func mapping(mapper: HelpingMapper) {
mapper <<<
type <-- MyEnumTypeTransform()
}
}这种用法中,mapping/didFinishMapping函数都可以在扩展中实现,但是,init()函数仍然需要在原class中声明。