测试测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2019年3月 |
SPM支持 SPM | ✗ |
由 Brad Hilton,Brad Hilton 维护。
将您的基本类型和模型转换为 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
如 Convertible
或 JsonValue
之类的来自《Convertible` 框架的类型也实现了 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 文件。