SwiftModelMapper 0.2

SwiftModelMapper 0.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Sebastian Gomez Osorio 维护。



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

SwiftModelMapper

用法

SwiftModelMapper 是一个专门为 iOSSwift 编写的令人愉快的库。它以高标准的质量构建,以快速且安全地将字典解析为模型。

为您的下一个项目选择 SwiftModelMapper,或将现有项目迁移,我们保证您一定会为此感到高兴!

如何开始

  • 下载 SwiftModelMapper 并尝试包含的 iPhone 演示实例

安装

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

将文件复制到您的项目中

  1. 将 SwiftModelMapper 文件夹拖放到您的项目中
  2. 在“选择选项对话框”中,勾选“在需要时复制项”并选择“创建组”选项,然后按完成按钮。

用法

首先,您需要在 AppDelegate 或其它的文件里导入 SwiftModelMapper。

import SwiftModelMapper

重要事项

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

从字典获取模型

SwiftModelMapper 是 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 Osorio, Leonardo Armero Barbosa

许可证

ContactsManager 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。