Arrow:Swift语言中的JSON映射简化框架





项目名称:Arrow

Arrow是一个用于Swift语言的开源框架,旨在简化JSON数据到模型对象的映射过程。它通过一个简洁的箭头操作符<--来减少模板代码,提高代码的可读性和可维护性。以下是该项目的主要特点和使用方法:

特点

  • 类型推断:Arrow能够推断出JSON字段对应的Swift类型,减少显式类型转换。

  • 模型清洁:使用Arrow,模型类中无需额外的初始化方法或解析代码。

  • 自定义和嵌套模型:Arrow支持自定义转换和嵌套模型的解析。

  • 点和数组语法:支持点表示法和数组语法来访问JSON中的嵌套数据。

  • 纯Swift、简单且轻量级:Arrow完全用Swift编写,无额外依赖,易于集成和使用。

示例

以下是使用Arrow前后的代码对比:

Swift模型

struct Profile {
    var identifier = 0
    var name = ""
    var link:NSURL?
    var weekday:WeekDay = .Monday
    var stats = Stats()
    var phoneNumbers = [PhoneNumber]()
}

JSON文件

{
    "id": 15678,
    "name": "John Doe",
    "link": "https://apple.com/steve",
    "weekdayInt" : 3,
    "stats": {
        "numberOfFriends": 163,
        "numberOfFans": 10987
    },
    "phoneNumbers": [{
                     "label": "house",
                     "number": "9809876545"
                     }, {
                     "label": "cell",
                     "number": "0908070656"
                     }, {
                     "label": "work",
                     "number": "0916570656"
    }]
}

使用Arrow之前

var profile = Profile()

// Int
if let id = json["id"] as? Int {
    profile.identifier = id
}  
// String
if let name = json["name"] as? String {
    profile.name = name
}
// NSURL
if let link = json["link"] as? String, url = NSURL(string:link)  {
    profile.link = link
}
// Enum
if let weekdayInt = json["weekdayInt"] as? Int, weekday = WeekDay(rawValue:weekdayInt) {
    profile.weekday = weekday
}
// Custom nested object
if let statsJson = json["stats"] as? AnyObject {
    if let numberOfFans = statsJson["numberOfFans"] as? Int {
        profile.stats.numberOfFans = numberOfFans
    }
    if let numberOfFriends = statsJson["numberOfFriends"] as? Int {
        profile.stats.numberOfFriends = numberOfFriends
    }
}
// Array of custom nested object
if let pns = json["phoneNumbers"] as? [AnyObject] {
    for pn in pns {
        phoneNumbers.append(PhoneNumber(json: pn))
    }
}

使用Arrow之后

extension Profile:ArrowParsable {
    mutating func deserialize(_ json: JSON) {
        identifier <-- json["id"]
        link <-- json["link"]
        name <-- json["name"]
        weekday <-- json["weekdayInt"]
        stats <- json["stats"]
        phoneNumbers <-- json["phoneNumbers"]
    }
}

用法

let profile = Profile()
profile.deserialize(json)

安装

Arrow支持通过Swift Package Manager安装。其他包管理器(如Carthage和CocoaPods)在版本5.1.2之后已不再支持。

Swift Package Manager

在Xcode中,选择File > Swift Packages > Add Package Dependency...,然后粘贴Arrow的GitHub地址。

或许喜欢

NavigationView - 简化SwiftUI导航的开源库

NavigationView是一个开源的SwiftUI库,旨在简化iOS应用中的导航过程,提供自定义动画、手势支持和代码清洁功能。

最近更新 2024-12-09

Ananda:基于yyjson的Swift JSON模型解码库

Ananda是一个基于yyjson的Swift库,用于高效地解码JSON数据到Swift模型,支持自定义路径解码和宏简化模型创建。

最近更新 2024-12-09

SwiftEasyPop:轻量级SwiftUI自定义弹窗和提示库

SwiftEasyPop是一个轻量级且易于使用的SwiftUI库,用于在Swift应用中显示自定义弹窗和提示,支持iOS 14.0+,兼容暗黑和明亮模式。

最近更新 2024-12-15

热榜

Made with in Shangrao,China By 老雷

Copyright © devler.cn 1987 - Present

赣ICP备19009883号-1