DecodeValue 1.0.0

DecodeValue 1.0.0

outofcode 维护。



  • outofcoding

DecodeValue

CI Status Version License Platform

安装

DecodeValue 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中

pod 'DecodeValue'

要求

  • Swift 4.x 之上

示例

要运行示例项目,请克隆存储库,然后首先从示例目录运行pod install

帮助解析(可解码)。

  1. 导入DecodeValue
  2. 数据结构。
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>
}
  1. 使用
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
        }
    }
}

作者

许可证

DecodeValue遵循MIT许可。有关更多信息,请参阅LICENSE文件。