CodableKit ⚡️

Swift Version Platform CI

CodableKit 是一个 Swift 宏包,旨在简化 Swift 的 Codable 协议的使用,通过轻松集成默认值来减少您需要编写的辅助代码量。

特性

用法

要使用 Codable 宏,只需将 @Codable 属性添加到您的结构体声明中即可。

@Codable
struct Car {
    let brand: String
    let model: String
    var year: Int = 2024
}

通过将 year 属性的默认值设置为 2024,当原始数据不包含该属性时,该值将为 2024。

高级用法

Codable 宏通过 @CodableKey 属性及其相关选项提供了几个附加功能。

@CodableKey("uid")
let id: UUID
@CodableKey(options: [.useDefaultOnFailure, .transcodeRawString])
var someProperty: SomeType

您可以在 CodableKeyOptions.swift 文件中找到详细信息。

可用选项

示例

这是一个展示各种功能的综合示例

@Codable
struct User {
    @Codable
    struct Car {
        let brand: String
        let model: String
        let year: Int
    }

    @CodableKey("uid")
    let id: UUID

    let name: String

    var age: Int = 24

    @CodableKey(options: .useDefaultOnFailure)
    var avatar: URL? = nil

    @CodableKey(options: .transcodeRawString)
    var car: Car

    @CodableKey(options: .ignored)
    let thisPropertyWillNotBeIncluded: String = "ignored"

    @CodableKey("custom_email", options: .generateCustomKey)
    var email: String

    @CodableKey(options: .explicitNil)
    var optionalField: String?
}

在此示例中

安装

.package(url: "https://github.com/WendellXY/CodableKit.git", from: "1.0.0"),

对于那些仍然使用 Swift 5 或具有需要 Swift 5 或 swift-syntax 510.0.0 的依赖项的人,您可以使用以前的 0.x 版本的 CodableKit,它与 Swift 5 兼容,并且应该涵盖最新版本中的大多数功能。请注意,0.x 版本将不再开发,建议升级到最新版本。

.package(url: "https://github.com/WendellXY/CodableKit.git", from: "0.4.0"),

限制

当将此宏应用于基类时,在类定义头中,你不应该向类添加任何继承。否则,此类将被视为具有超类的类,因为宏无法在宏展开期间识别继承是类还是协议。

// Codable will consider the BaseUser as a base class since it does not have any inheritance
@Codable
class BaseUser { }

// Codable will consider the HashableUser as a subclass even if the inheritance just contains a protocol
@Codable
class HashableUser: Hashable { }

// So you have to write the HashableUser like:
@Codable
class HashableUser { }
extension HashableUser: Hashable { }

贡献

请随时为 CodableKit 做出贡献! 任何意见和建议都将不胜感激。