ConvertibleArchiver 5.0.1

ConvertibleArchiver 5.0.1

测试测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2019年3月
SPM支持 SPM

Brad HiltonBrad Hilton 维护。



  • 作者
  • Brad Hilton

Convertible

将您的基本类型和模型转换为 JSON、二进制数据等,是应用开发中常见的任务。`Convertible` 定义了一系列 Swift 协议和实现,使得转换过程变得简单,您无需编写样板代码。

安装

`Convertible` 通过 CocoaPods 提供。要安装,只需在您的 Podfile 中包含以下行

use_frameworks!
pod 'Convertible'

请确保在您的 .swift 文件的顶部导入该模块

import Convertible

或者,克隆此仓库或将其作为 zip 文件下载,并将类包含到您的项目中。

数据

在 iOS/OSX 开发中,使用 NSData 是一项基本任务。《Convertible》通过轻松将您的 Swift 和 Cocoa 类型以及您自己的自定义模型转换为 NSData,使这一转换变得容易。

DataConvertible

《Convertible` 框架定义了一个通用的协议 DataConvertible,用于转换为 NSData 和从 NSData 转换

protocol DataConvertible : DataInitializable, DataSerializable {

    static func initializeWithData(data: NSData, options: [ConvertibleOption]) throws -> Self

    func serializeToDataWithOptions(options: [ConvertibleOption]) throws -> NSData

}

DataConvertible` 使您能够轻松地从一个 NSData 对象(以及轻松反序列化为 NSData)创建任何符合条件的类型

let data = // Some arbitrary NSData...
let string = try String.initializeWithData(data, options: [])
let newData = try string.serializeToDataWithOptions([])

包括以下类型的默认实现

NSString
NSArray
NSDictionary
NSSet
NSImage
UIImage
Swift.String
Swift.Array
Swift.Dictionary
Swift.Set

ConvertibleJsonValue 之类的来自《Convertible` 框架的类型也实现了 DataConvertible。您可以扩展您自己的自定义类型以实现 DataConvertible,以便利用此强大约定。

JSON

似乎没有什么比 JSON 更普遍了。但是,使用常规方法将对象转换为 JSON 或从 JSON 转换对象可能会非常痛苦。《Convertible》通过定义一个标准协议和基于值的抽象 `JsonConvertible` 以及 `JsonValue`,使与 JSON 的交互变得容易。

JsonConvertible

JsonConvertible` 定义了一个简单的协议,用于转换为 JsonValue

protocol JsonConvertible {

    static func initializeWithJson(json: JsonValue, options: [ConvertibleOption]) throws -> Self

    func serializeToJsonWithOptions(options: [ConvertibleOption]) throws -> JsonValue

}

Convertible` 为大多数常见的 Cocoa 和 Swift 类型提供了默认实现

NSString
NSArray
NSDictionary
NSNumber
NSNull
NSSet
NSURL
NSImage
UIImage
Swift.Array
Swift.Bool
Swift.Dictionary
Swift.Double
Swift.Float
Swift.Int
Swift.Optional
Swift.Set
Swift.String

您可以通过实现 JsonConvertible 来扩展任何其他类型,并为您的自定义类型利用 JSON 的力量!

JsonValue

JsonValue 是 JSON 实体可能具有的所有值的枚举抽象(如由 NSJSONSerialization 返回)

public enum JsonValue {

    case String(NSString)
    case Number(NSNumber)
    case Array([JsonValue])
    case Dictionary([NSString : JsonValue])
    case Null(NSNull)

    public init(object: AnyObject) throws

    public var object: AnyObject { get }

}

因为 JsonValue 遵循 DataConvertible,它提供了一种更简单的方式,用于考虑 JSON 响应的可能的值

let json = try JsonValue.initializeWithData(data)
switch json {
case .String(let string): // It's a string!!
case .Number(let number): // It's a number!!
case .Array(let array): // It's an array!!
case .Dictionary(let dictionary): // It's a dictionary!
case .Null(_): // This JSON value is null. Nothing to see here.
}

模型

Convertible 让您轻松定义模型。只需创建一个遵循 Convertible 的类或结构体,您就可以轻松设置!

class User : Convertible {
  var id: Int
  var name: String
  var friend: User?
  var created: NSDate?
}

Convertible 实现了所有转换协议。因此,从 NSData 创建一个新的 User 非常容易

let data = // Some JSON NSData from a HTTP request...
let user = try User.initializeWithData(data)

键映射

JSON 键值的默认标准是下划线 (例如,this_is_a_json_property) 而不是驼峰式。 Convertible 支持开箱即用的自动映射下划线到驼峰式。只需将 UnderscoreToCamelCase 协议添加到您的模型定义中即可

class User : Convertible, UnderscoreToCamelCase {
  var firstName: String
  var lastName: String
  var bestFriend: User?
  var createdAt: NSDate?
}

您还可以指定自定义键映射

class User : Convertible, UnderscoreToCamelCase {
  var firstName: String
  var lastName: String
  var isPublic: Bool
  static var keyMapping = ["isPublic" : "public"] // [PropertyKey : MappedKey]
}

作者

Brad Hilton, [email protected]

许可

Convertible 适用于 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。