Argo Carthage compatible Reviewed by Hound

Argo 是一个库,它允许你以简洁、类型安全且易于扩展的方式从 JSON 或类似结构中提取模型。使用 Argo,你无需编写验证代码来确保传入的数据类型正确,或者确保所需的数据字段不为空。Argo 使用 Swift 具有表现力的类型系统来为你完成这些工作,并在未找到你期望的内容时报告明确的失败状态。

Argo 是希腊语中 swift(迅速)的意思,也是 Aeson 之子 Jason 和 Argonauts(阿尔戈英雄)所使用的船的名字。Aeson 是 Haskell 中的 JSON 解析库,它启发了 Argo,就像 Aeson 启发了他的儿子 Jason 一样。

版本兼容性

请注意,我们积极地推动 master 分支与新版本的 Swift 一起前进。因此,我们强烈建议不要指向 master 分支,而是使用 我们提供的版本之一

以下是当前 Swift 兼容性细分

Swift 版本 Argo 版本
4.X master
3.X 4.X
2.2, 2.3 3.X
2.0, 2.1 2.X
1.2 - 2.0 1.X
1.1 0.3.X

安装

Carthage

将以下内容添加到你的 Cartfile

github "thoughtbot/Argo"

然后运行 carthage update

请按照 Carthage 的 README 中的最新说明进行最新的安装。

请注意,如果你使用较新版本的 Argo,你将需要将 Argo.frameworkRunes.framework 都链接到你的应用程序中。

CocoaPods

将以下内容添加到你的 Podfile

pod 'Argo'

你还需要确保你选择使用 frameworks

use_frameworks!

然后使用 CocoaPods 0.36 或更新版本运行 pod install

Git 子模块

我想如果那是你的风格,你可以这样做。

将此仓库添加为子模块,并将项目文件添加到你的工作区。然后你可以链接到应用程序目标的 Argo.framework

如果你使用的是较新版本的 Argo,则需要对 Runes 执行相同的操作。

用法 tl;dr

请注意:下面的示例需要一个名为 Curry 的附加外部模块,它允许我们使用 curry 函数来柯里化 User.init

它还导入了 Runes,它是较新版本 Argo 的依赖项。如果你使用的是旧版本的 Argo,则可能不需要该导入。

import Argo
import Curry
import Runes

struct User {
  let id: Int
  let name: String
  let email: String?
  let role: Role
  let companyName: String
  let friends: [User]
}

extension User: Decodable {
  static func decode(_ json: JSON) -> Decoded<User> {
    return curry(User.init)
      <^> json <| "id"
      <*> json <| "name"
      <*> json <|? "email" // Use ? for parsing optional values
      <*> json <| "role" // Custom types that also conform to Decodable just work
      <*> json <| ["company", "name"] // Parse nested objects
      <*> json <|| "friends" // parse arrays of objects
  }
}

// Wherever you receive JSON data:

let json: Any? = try? NSJSONSerialization.JSONObjectWithData(data, options: [])

if let j: Any = json {
  let user: User? = decode(j)
}

有关更多信息,请参阅 文档

贡献

请参阅 CONTRIBUTING 文档。谢谢你,贡献者

许可证

Argo 版权所有 (c) 2015 thoughtbot, inc. 它是免费软件,可以根据 LICENSE 文件中指定的条款进行重新分发。

关于

thoughtbot

Argo 由 thoughtbot, inc. 维护和资助。thoughtbot 的名称和徽标是 thoughtbot, inc. 的商标。

我们热爱开源软件!请查看 我们的其他项目 或查看我们的产品 案例研究聘请我们 来帮助构建你的 iOS 应用程序。