Codable-Kit 0.1.0

Codable-Kit 0.1.0

Zonily Jame Pesquera维护。



CodableKit

LinkedIn Github Cocoapods Swift 5

一个更Swift的 Codable 体验。 CodableKit 是一个库,用于扩展 Swift 的 Codable

特性

  • 不指定类型进行解码
  • 解码/编码 Array<Any>
  • 解码/编码 Dictionary<String, Any>
  • 使用模型初始化器代替使用 Decoder.decode(...) 方法
  • XML 自定义解码器/编码器 CodableKit/XMLParsing

要求

  • iOS 9.0+
  • Swift 5.1+

安装

CodableKit 通过依赖管理器 CocoaPods 可用。

要通过 Cocoapods 安装 CodableKit,只需在 podfile 中添加此内容,然后运行 pod install

pod 'Codable-Kit'

用法

在您需要进行编码/解码对象的Swift文件顶部导入CodableKit

import Codable_Kit

您与编码/解码的所有交互都将使用Swift的Codable协议进行。这个库只是为提高Codable的功能而添加的扩展集合。

通常解码一个对象需要您指定需要解码的对象类型。

let decoder = JSONDecoder()
do {
    let user = try decoder.decode(User.self, from userData)
} catch {
    print(error)
}

使用这个框架中添加的扩展,您现在可以在不指定方法本身上的数据类型的情况下进行解码。

let decoder = JSONDecoder()
do {
    let user: User = try decoder.decode(userData)
    // or
    let user2 = try decoder.decode(userData) as User
} catch {
    print(error)
}

此外,您还可以直接实例化遵循Decodable的对象。

struct User: Decodable {
    let id: String
    let firstName: String
    let lastName: String
}

do {
    let user = try User(data)
    let user2 = try User(string)
    let user3 = try User(fileUrl)
} catch {
    print(error)
}

这个框架添加的另一个功能是对[String: Any][Any]类型的解码/编码支持

let decoder = JSONDecoder()
do {
    let dict = try decoder.decode([String: Any].self, from data)
    let dict2: [String: Any] = try decoder.decode(data)
    let dict3 = try decoder.decode(data) as [String: Any]
    
    let array = try decoder.decode([Any].self, from data)
    let array2: [Any] = try decoder.decode(data)
    let array3 = try decoder.decode(data) as [Any]
} catch {
    print(error)
}

这也会在遵循Codable/Decodable的模型上生效。

struct FooModel: Codable {
    let dict: [String: Any]
    let array: [Any]
    let optionalDict: [String: Any]?
    let optionalArray: [Any]?

    enum CodingKeys: String, CodingKey {
        case dict
        case array
        case optionalDict
        case optionalArray
    }
}

let decoder = JSONDecoder()
do {
    let foo: FooModel = try decoder.decode(data)
    print("dict:", foo.dict)
    print("array:", foo.array)
    print("optionalDict:", foo.optionalDict)
    print("optionalArray:", foo.optionalArray)
} catch {
    print(error)
}

此框架还可以从应用程序的包中解码文件

let decoder = FileDecoder(decoder: JSONDecoder(), bundle: .main, fileManager: .default)
do {
    let user = try decoder.decode(User.self, from: File(name: "user", type: "json"))
    
    let user2: User = try decoder.decode(File(name: "user", type: "json"))
} catch {
    print(error)
}

许可证

所有源代码都根据MIT许可证授权。