欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Eta ios json

劉柏宏2年前8瀏覽0評論

Eta是一個使用Swift語言編寫的iOS開發(fā)框架,它提供了一種便捷、高效的方式來處理JSON數(shù)據(jù)。Eta自帶了一個名為JSONAbler的協(xié)議,通過實現(xiàn)這個協(xié)議可以使得對象具備將自身轉(zhuǎn)化為JSON格式的能力。而JSON接口則通過iOS系統(tǒng)自帶的NSJSONSerialization進(jìn)行轉(zhuǎn)換,并提供了便捷、安全的方法來完成JSON的序列化和反序列化。

protocol JSONAbler {
func toJSON() ->Any
init(json: Any)
}
extension JSONAbler {
func toJSON() ->Any {
let mirror = Mirror(reflecting: self)
let dict = Dictionary(uniqueKeysWithValues: mirror.children.lazy.map {
(label: String?, value: Any) ->(String, Any)? in
guard let key = label else {
return nil
}
return (key, value)
}.compactMap { $0 })
return dict
}
init(json: Any) {
if let dict = json as? [String: Any] {
for case let (label?, _) in Mirror(reflecting: self).children {
if let value = dict[label] {
let valueType = Mirror(reflecting: value).subjectType
if let v = value as? [String: Any], valueType is JSONAbler.Type {
let newVal = (valueType as! JSONAbler.Type).init(json: v)
self.setValue(newVal, forKey: label)
} else if valueType is String.Type ||
valueType is Int.Type ||
valueType is Double.Type ||
valueType is Float.Type ||
valueType is Bool.Type {
self.setValue(value, forKey: label)
}
}
}
}
}
}

可以看出,通過實現(xiàn)JSONAbler協(xié)議的對象可以通過toJSON()方法將自身轉(zhuǎn)成為一個Dictionary類型,而通過init(json: Any)方法可以反序列化JSON數(shù)據(jù)并將其賦值給對應(yīng)的對象屬性,這一切都可以方便地實現(xiàn)JSON數(shù)據(jù)的序列化和反序列化。