AnimatedSwiftTable 5.0.0

AnimatedSwiftTable 5.0.0

Brad Hilton 维护。



 
依赖
SwiftTable= 0.5.0
Changeset= 2.0.1
 

  • 作者
  • 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 或从 JSON 转换回对象可能是一个大麻烦。《Convertable》通过定义带有 JsonConvertibleJsonValue 的标准协议和值类型抽象来简化与 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.
}

模型

Convertable 使定义模型变得容易。只需创建一个符合 Convertable 的类或结构体即可!

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

Convertable 实现了所有转换协议。因此,从 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 文件。