ParceSwift 0.1.0

ParceSwift 0.1.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2016年11月
SwiftSwift 版本3.0
SPM支持 SPM

Sebastian Gomez Osorio 维护。



  • Leonardo Armero Barbosa,Sebastián Gómez Osorio

ParceSwift

使用方法

ParceSwift 是一个适用于 iOS 且专门针对 Swift 的迷人库。它是按照高标准构建的,可以快速和安全地将字典解析为模型。

选择 ParceSwift 作为你的下一个项目,或者迁移你的现有项目,我们保证你会为你的决定感到高兴!

如何开始

  • 下载 ParceSwift 并尝试包含的 iPhone 演示

安装

  • 使用 Cocoapods
  • 将所有文件复制到你的项目中

将文件复制到你的项目中

  1. 将 ParceSwift 文件夹拖到你的项目内
  2. 在“选择选项”对话框中,勾选“如果需要则复制项目”并选择“创建组”选项,然后按完成按钮。

使用方法

首先,你需要将 ParceSwift 导入到 AppDelegate 或你想要的位置

import ParceSwift

重要事项

  • 所有你想映射的模型都必须继承自 NSObject。
  • 如果你有 Int, Float 或 Double 类型的属性,你必须将这些类型更改为 NSNumber。
  • 如果你有 Bool 类型的属性,你必须在其声明中初始化这些属性。

从字典中获取模型

ParceSwift 是 NSObject 的扩展,你所需要做的就是创建一个新的对象,并开始将字典转换为任意类。

假设你有像这样的一些 JSON

{
    "name": "Brian",
    "age": 26,
    "height": 1.75,
    "isOld": true,
    "user_email": "[email protected]",
    "mobile_number": "567-876-2343",
    "address": {
        "street": "Columbus",
        "avenue": 12
    },
    "anyDictionary": {
        "key": 2
    },
    "arrayAnyTypes": [1, 2, 3, 4, 5],
    "modelsArray": [{
        "street": "sabaneta",
        "avenue": 12
    }, {
        "street": "sabaneta",
        "avenue": 13
    }]
}

你的 User 模型看起来像这样

class User: NSObject {
    var name: String?
    var age: NSNumber?
    var height: NSNumber!
    var isOld: Bool = false
    var email: String?
    var cellphone: String?
    var address: Address?
    var anyDictionary: [String:Int]?
    var arrayAnyTypes: [Int]?
    var modelsArray: [Address]?
}

如你所见,该模型有一个名为 address 的属性,这个属性是 Address 类型的,这是一个类,如下所示

class Address : NSObject {
    var street: String?
    var avenue: NSNumber?
}

使用任何 JSON 解析器,你需要将这个 NSString 转换为 NSDictionary 的表示形式

var error: NSError?
var data = jsonData.dataUsingEncoding(NSUTF8StringEncoding)
do{
    var dataDictionary: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
} catch {

}

接下来,你必须创建一个对象,并调用 'fromDictionary' 函数将字典作为参数传递

let user = User()
user.fromDictionary(dataDictionary)

然后你可以使用模型属性和函数

print(user.name!)
print(user.address!.street!)

将 JSONArray 映射到模型数组

假设你有这样的字典数组

let array = [["street":"sabaneta","avenue":12], ["street":"sabaneta","avenue":13]]

您只需要调用'fromJsonArray’函数并将数组作为参数传入,就可以轻松获取到模型数组。

let modelsArray: [Address] = Address.fromJsonArray(array)

要使用'fromJsonArray’函数,您不需要实例化类,只需从您的模型类中调用它即可。

重写属性键名

如果您的JSON中有任何键名与模型属性名不匹配,您可以在模型中重写'customKeysName’函数来将此键映射到属性。您必须返回一个包含模型属性名和将接收在json中的名称的字典。

override func customKeysName() -> [String : String]? {
    let customs = [
            "email": "user_email",
            "cellphone": "mobile_number"
    ]
    return customs
}

从JSON字符串获取模型

相同的流程,但您必须使用'fromJSON’函数。

do{
    let jsonString = "{\"name\": \"Jose\",\"age\": 25,\"address\": {\"street\": \"Cupertino\",\"avenue\": 15},\"height\": 1.64,\"isMan\": true,\"anyDictionary\": {\"key\": 2},\"arrayAnyTypes\": [1, 2, 3, 4, 5],\"modelsArray\": [{\"street\": \"Medellín\",\"avenue\": 10}, {\"street\": \"Medellín\",\"avenue\": 11}]}"
    let userJ = User()
    try userJ.fromJSON(jsonString)

    print("name: \(userJ.name!), address: Street \(userJ.address!.street!) Avenue \(userJ.address!.avenue!)")
} catch {
    print("The string isn't a valid JSON")
}

必须使用try catch块来进行错误处理。

从模型创建字典

如果您的模型和子模型都继承自NSObject

class User: NSObject {
    var name: String?
    var age: NSNumber?
    var height: NSNumber!
    var isMan: Bool = false
    var address: Address?
    var anyDictionary: [String:Int]?
    var arrayAnyTypes: [Int]?
    var modelsArray: [Address]?
}
class Address: NSObject {
    var street: String?
    var avenue: NSNumber?

    init(street: String, avenue: NSNumber) {
        super.init()
        self.street = street
        self.avenue = avenue
    }
}

并且已经初始化

let homeAddress = Address(street: "Columbus", avenue: 12)
let workAddress = Address(street: "Sabaneta", avenue: 13)
let marketAddress = Address(street: "Cupertino", avenue: 15)

let user = User()
user.name = "Brian"
user.age = 26
user.address = homeAddress
user.height = 1.75
user.isMan = true
user.anyDictionary = ["key": 2]
user.arrayAnyTypes = [1, 2, 3, 4, 5]
user.modelsArray = [workAddress, marketAddress]

从您的模型创建字典非常简单

let myDictionary: [String: AnyObject] = user.toDictionary()

从模型创建JSON字符串

相同的流程,但您必须使用'fromJSON’函数。

do {
    let jsonString = try user.toJSON()
    print("toJSON: " + jsonString)
} catch {
    print("The model can't be parsed to JSON format")
}

作者

Sebastián Gómez OsorioLeonardo Armero Barbosa

许可协议

ContactsManager根据MIT许可协议提供。有关更多信息,请参阅LICENSE文件。