CodableMapper

Swift 5.1 Swift Package Manager MacOS Linux

CodableMapper 是一个 Swift 微型库,它提供了一个接口(通过属性包装器),用于为 Codable 结构体中的各个属性定义自定义映射器。

用法

此包中提供了三个属性包装器:DecodableMapperEncodableMapperCodableMapper;这些类似于 DecodableEncodableCodable 协议的工作方式,其中最后一个是前两个协议的组合。

要使用 DecodableMapper,您必须指定一个符合 DecodableMapperProvider 的类/结构体,它基本上包含一个静态方法,用于将原始 Data 中的值映射到特定的值。 类似这样:

struct Person: Decodable {

    ...

    @DecodableMapper<CustomDateProvider>
    var dateOfBirth: Date

    ...
}

请注意,您仍然需要使 Person 结构体符合 Decodable,否则您将无法解码它(只是以防万一不太明显 😅)

类似地,您可以使用 EncodableMapper,您必须使用符合 EncodableMapperProvider 的类/结构体来专门化它,它执行相反的映射(从特定的值到原始 Data)

struct Person: Encodable {

    ...

    @EncodableMapper<CustomDateProvider>
    var dateOfBirth: Date

    ...
}

同样,Person 结构体必须符合 Encodable

最后,我们有 CodableMapper,它类似于 Codable,其中映射器提供程序必须同时符合 DecodableMapperProviderEncodableMapperProvider。 用法与之前的类似

struct Person: Codable {

    ...

    @CodableMapper<CustomDateProvider>
    var dateOfBirth: Date

    ...
}

请注意,您必须为可选值和非可选值指定不同的提供程序,即使使用的映射是相同的,遗憾的是我找不到一种很好的方法来重用它们,所以如果您有任何想法,请随时打开 PR 😊

struct Person: Codable {

    ...

    @CodableMapper<ISODateProvider>
    var dateAdded: Date

    @CodableMapper<OptionalISODateProvider>
    var lastUpdated: Date?
    
    ...
}

您可以查看此仓库中的 Tests,以了解 CodableMapper 属性包装器在实践中如何工作,以及如何定义您自己的映射器提供程序。

安装

使用 Swift Package Manager

CodableMapper 作为依赖项添加到您的 Package.swift 文件中。 有关更多信息,请参阅 Swift Package Manager 文档

.package(url: "https://github.com/rkreutz/CodableMapper", from: "1.0.0")

帮助 & 反馈