CodableExtensions
安装
CodableExtensions 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile
pod 'CodableExtensions'
并运行
pod install
用法
解码
要创建一个自定义解码转换器,您只需实现 DecodingContainerTransformer
。项目中提供了一个示例,用于将正则表达式转换为其他形式。
import CodableExtensions
public class RegexCodableTransformer: DecodingContainerTransformer {
public typealias Input = String
public typealias Output = NSRegularExpression
public init() {}
public func transform(_ decoded: Input) throws -> Output {
return try NSRegularExpression(pattern: decoded, options: [])
}
}
需要定义 Input
和 Output
类型,以匹配预期的转换类型。在这种情况下,输入是 String
类型,输出是 NSRegularExpression
类型。
在 transform
函数中执行转换逻辑。如果任何地方发生错误,则必须抛出错误。
自定义转换器可用于Decodable
初始化器
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
regex = try container.decode(.regex, transformer: RegexCodableTransformer())
}
编码
要创建自定义编码转换器,请创建一个实现EncodingContainerTransformer
的类
例如,编码NSRegularExpression
class RegexCodableTransformer: EncodingContainerTransformer {
typealias Input = String
typealias Output = NSRegularExpression
public func transform(_ encoded: Output) throws -> Input {
return encoded.pattern
}
}
要使用此转换器,实现Encodable函数encode(to encoder: Encoder)
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(regex, forKey: .regex, transformer: RegexCodableTransformer())
}
如果您的转换器同时符合EncodingContainerTransformer
和DecodingContainerTransformer
,则可以使用CodingContainerTransformer
别名
完整示例请查看测试https://github.com/jamesruston/CodableExtensions/blob/master/Example/Tests/Tests.swift
关于此库背后的动机,请阅读我的Medium文章https://medium.com/@James_Ruston/codable-vs-objectmapper-af5fe8e8efd5
安装
CocoaPods
CodableExtensions通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中
pod 'CodableExtensions'
运行pod install
以将CodableExtensions
集成到您的工作空间。
Carthage
CodableExtensions通过Carthage提供。要安装它,只需将以下行添加到您的Carthage文件中
github "jamesruston/CodableExtensions"
运行carthage update
以构建框架,然后将构建的CodableExtensions.framework
拖到您的Xcode项目中。
作者
https://medium.com/@James_Ruston/
许可证
CodableExtensions 在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。