Derulo
一系列灵活的 Swift 协议和辅助工具,用于组织和管理 JSON 与原生 Swift 对象之间的转换。
旨在为您的模型对象提供一个一致的数据库转置/映射/缓存/离线策略而不影响您。
-
设计得足够灵活,以满足您的模型实现需求,同时提供一个通用框架来组织您的 JSON 解析和缓存策略。
-
一组可组合但不同的功能,以便您使用适用于当前用例的协议和辅助工具。
-
简单、直接且轻量级;Derulo 正介于“我只是自己实现它而无需第三方库”和“我真的不想重写轮子并从头开始实现 JSON 策略”之间。
示例
从JSON开始
var jasonJSON = [String : Any]()
jasonJSON["id"] = 93
jasonJSON["name"] = "Jason Derulo"
jasonJSON["fav_song"] = "wiggle"
从JSON获取
解析成模型对象
let jasonPerson = Person(json: jasonJSON)
转换为JSON
转换成JSON
let jasonPersonJSON = jasonPerson.asJSON
数组
创建另一个JSON
var jaySeanJSON = JSON()
jaySeanJSON["id"] = 57
jaySeanJSON["name"] = "Jay Sean"
从JSON数组开始
let jsonArray: [JSON] = [jasonJSON, jaySeanJSON]
解析为模型对象
let people: [Person] = JSONMapper<Person>().mapArray(json: jsonArray)
转换为JSON
let peopleJSON: [JSON] = JSONConverter<Person>().jsonArray(fromArray: people)
持久性
let persistenceKey = "people"
存储到磁盘
JSONPersistenceManager<Person>().store(array: people, withKey: persistenceKey)
从磁盘恢复
let restoredPeople: [Person] = JSONPersistenceManager<Person>().restoreArray(withKey: persistenceKey)
从磁盘删除
JSONPersistenceManager<Person>().removeObject(withKey: persistenceKey)
从数据中获取
以数据开始
guard let data = try? JSONSerialization.data(withJSONObject: jasonJSON, options: []) else { return }
映射到对象
let jasonPersonFromData = JSONMapper<Person>().map(data: data)
print(jasonPersonFromData ?? "")
示例实现
struct Person: Identifiable, JSONModel {
let identifier: Identifier
let name: String
let favoriteSong: Song?
}
extension Person: JSONMappable {
init?(json: JSON?) {
guard let json = json else { return nil }
guard let id = IntToStringTransform().transform(fromJSON: json["id"]) else {
print(#function, String(describing: Person.self), "JSON missing required properties")
return nil
}
self.identifier = id
self.name = json["name"] as? String ?? "No Name"
self.favoriteSong = Song(jsonEntry: json["fav_song"])
}
}
extension Person: JSONConvertible {
var asJSON: JSON {
var json = JSON()
json["id"] = IntToStringTransform().transform(toJSON: identifier)
json["name"] = name
if let favoriteSong = favoriteSong {
json["fav_song"] = favoriteSong.asJSONEntry
}
return json
}
}
extension Person: JSONPersistable {
var asPersistenceJSON: JSON { asJSON }
}
enum Song: String {
case wiggle
case talkDirty
}
extension Song: JSONEntryMappable, JSONEntryConvertible {
init?(jsonEntry: JSONEntry?) {
guard let jsonEntry = jsonEntry as? String else { return nil }
self.init(rawValue: jsonEntry)
}
var asJSONEntry: String { rawValue }
}
需求
Swift 5.6
安装
Swift包管理器
Swift包管理器(https://swiftlang.cn/package-manager/)是一个用于自动化分发Swift代码的工具,并集成在swift
编译器中。
一旦你设置了Swift包,将Derulo添加为依赖就像将其添加到你的Package.swift
中的dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/dockwa/Derulo", .upToNextMajor(from: "1.7.2"))
]
CocoaPods
Derulo可以通过CocoaPods获取。要安装它,只需将以下行添加到你的Podfile
pod 'Derulo'
作者
Christian Hatch,[email protected]
许可
Derulo遵循MIT许可证。有关更多信息,请参阅LICENSE文件。