JSONMatching 1.0.2

JSONMatching 1.0.2

DeanChen 维护。



  • 作者:
  • DeanChen

JSONMatching

CocoaPods Platform

在纯 Swift 中将 JSON 数据解码成 Model 对象的简单方法

  1. 要求
  2. 集成
  3. 使用方法

要求

  • iOS 8.0+
  • Xcode 8

集成

CocoaPods (iOS 8+)

您可以使用 CocoaPodsJSONMatching 添加到您的 Podfile 以进行安装

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
pod 'JSONMatching', '~> 1.0.0'
end

手动安装 (iOS 7+)

要手动在项目中使用此库,您可能需要:

  1. 对项目,只需将 JSONMatching.swift 拖到项目结构中
  2. 对工作区,请包含整个 JSONMatching.xcodeproj

使用方法

基础

为了支持从JSON进行反序列化,一个类需要继承自'CodableObject'。

import JSONMatching
class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0
}

let dic:[String:Any] = [
    "name":"jack",
    "age":18,
    "height":1.88,
    "male":true
]

let match = JSONMatching()
if let user = match.object(type: User.self, with: dic) {
    //...
}

JSONString

let jsonStr = """
    {
    "name": "aaa",
    "age": 18,
    "height": 166
    }
    """
    
let match = JSONMatching()
if let user = match.object(type: User.self, with: jsonStr) {
    //...
}   
    

对象数组

class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0
}

let userArray:[[String:Any]] = [
    ["name":"jack", "age":18, "height":1.88, "male":true],
    ["name":"lily", "age":18, "height":1.65, "male":false],
    ["name":"josh", "age":30, "height":1.77, "male":true]
]

let match = JSONMatching()
if let userArr = match.objectArray(type: [User].self, with: userArray) {
    //...
}

对象属性

在类中声明的对象属性应该被初始化。如果没有,可以使用'codableObjectForProperty'提供一个相对对象。

class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0
    var pet:Pet = Pet()
    
    class Pet: CodableObject {
        var type:String = ""
        var name:String = ""
        var age:Int = 0
    }
}

let dic:[String:Any] = [
    "name":"jack",
    "age":18,
    "height":1.88,
    "male":true,
    "pet": [
        "name":"micky",
        "type":"cat",
    ]
]

/*
// if property 'pet' is optional, provide a relative object
match.codableObjectForProperty { (type) -> CodableObject? in
    if type == Pet?.self {
        return Pet()
    }
    return nil
}
*/

if let user = match.object(type: User.self, with: dic) {
    //...
}

对象数组属性

使用'codableObjectForProperty'为类中声明的对象数组属性提供一个相对对象

class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0
    
    var cars:[Car] = [Car]()
    class Car: CodableObject {
        var brand:String = ""
        var color:String = ""
        var price:Double = 0
    }
    
    var children:[Child]?
    class Child: CodableObject {
        var name:String = ""
        var age:Int = 0
        var male:Bool?
    }
}

let match = JSONMatching()
match.codableObjectForProperty { (type) -> CodableObject? in
    if type == [Car].self {
        return Car()
    } else if type == [Child]?.self  {
        return Child()
    }
    return nil
}

if let user = match.object(type: User.self, with: dic) {
    //...
}