早上好 1.0.0

Ohayou 1.0.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最新发布2016年5月
SPM支持SPM

Brad Hilton 维护。



Ohayou 1.0.0

  • 作者:
  • 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的转换。

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

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

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 文件。