-
Notifications
You must be signed in to change notification settings - Fork 653
基本类型
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中声明。