测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2016年11月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Sebastian Gomez Osorio 维护。
ParceSwift 是一个适用于 iOS 且专门针对 Swift 的迷人库。它是按照高标准构建的,可以快速和安全地将字典解析为模型。
选择 ParceSwift 作为你的下一个项目,或者迁移你的现有项目,我们保证你会为你的决定感到高兴!
首先,你需要将 ParceSwift 导入到 AppDelegate 或你想要的位置
import ParceSwift
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!)
假设你有这样的字典数组
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
}
相同的流程,但您必须使用'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()
相同的流程,但您必须使用'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 Osorio,Leonardo Armero Barbosa
ContactsManager根据MIT许可协议提供。有关更多信息,请参阅LICENSE文件。