DecodeValue
安装
DecodeValue 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中
pod 'DecodeValue'
要求
- Swift 4.x 之上
示例
要运行示例项目,请克隆存储库,然后首先从示例目录运行pod install
。
帮助解析(可解码)。
- 导入DecodeValue
- 数据结构。
import UIKit
import DecodeValue
struct Job : Decodable {
var name: JSONString
}
struct People : Decodable {
var name: JSONString?
var age: JSONInt
var job: JSONDictionary<Job>
var jobs: JSONArray<Job>?
}
struct KoreaPeople : Decodable {
var name: JSONValue<String>
var age: JSONValue<Int>
}
- 使用
class ViewController: UIViewController {
// json String
private var data = """
{
"name": "OutOfCoding",
"age": 20,
"job": {
"first": {
"name":"engineer"
}
},
"jobsa": [
{
"name":"power"
}
]
}
""".data(using: .utf8)!
override func viewDidLoad() {
super.viewDidLoad()
var saveName: String = ""
if let people = decode(People.self, from: data) {
let name = people.name*.count // or use people.name.valueOrEmpty.count
let age = people.age* // or use people.age.value
print("name count = \(name), age = \(age)")
// result : name count = 11, age = 20
let job = people.job.value["first"]
let jobName = job?.name*
print("job1 name = \(jobName.or("No job"))")
// result : job1 name = engineer
let jobfirst = people.jobs*.first
let jobfirstName = jobfirst?.name*
print("job2 name = \(jobfirstName.or("No job"))")
// result : job2 name = No job
saveName <~ people.name // saveName = people.name.value
}
print("saveName = \(saveName)")
// result : saveName = "OutOfCoding"
var tempName: String?
if let koreaPeople = decode(KoreaPeople.self, from: data) {
let name = koreaPeople.name* // or use koreaPeople.name.value. this value is Optional
let age = koreaPeople.age* // or user koreaPeople.age.value. this value is Optional
print("name = \(name.or("None")), age = \(age.or(0))") // using or
// result : name = OutOfCoding, age = 20
tempName <~ koreaPeople.name // tempName = koreaPeople.name.value
}
print("tempName = \(tempName.or("Cool"))")
// result : tempName = Optional("OutOfCoding")
}
private func decode<T>(_ type: T.Type, from data: Data) -> T? where T : Decodable {
if let response = try? JSONDecoder().decode(type.self, from: data) {
return response
} else {
return nil
}
}
}
作者
- outofcoding, [email protected]
- DH, [email protected]
许可证
DecodeValue遵循MIT许可。有关更多信息,请参阅LICENSE文件。