ValueTransformerKit
一个基于闭包和协议的框架,用于 ValueTransformer,通过标识符注册 ValueTransformer 的辅助函数。
创建一个 ValueTransformer
使用闭包
let transformer = ValueTransformer.closure { object in
return ...
}使用此方法不再需要创建 ValueTransformer 子类。
使用协议实现
实现 ValueTransformerType 或 ResersableValueTransformerType,并有一个计算属性 transformer 可用。
使用枚举
定义您的 enum,在 transformers 中列出您的所有枚举情况,实现 ValueTransformerType 协议的 transformedValue 函数。
enum StringTransformers: String, ValueTransformers, ValueTransformerType {
case capitalized, lowercased, uppercased
public static let transformers: [StringTransformers] = [.capitalized, .lowercased, .uppercased]
public func transformedValue(_ value: Any?) -> Any? { ../* string manipulation */ }
}注册它
您可以使用 ValueTransformer 的可选初始化器获取值转换器: init?(forName: NSValueTransformerName)
ValueTransformerRegisterable 协议可以帮助您注册 ValueTransformer。通过提供一个值转换器和标识符 name,将提供一个新方法
myValueTransformer.register()所以在您的 ValueTransformerType 中定义一个标识符 name
struct MyTransformer: ValueTransformerType, ValueTransformerRegisterable {
var name = NSValueTransformerName(rawValue: "MyTransformation")对于单例实例
您可以使用 ValueTransformerSingleton 定义单例实例
struct MyTransformer: ValueTransformerType, ValueTransformerRegisterable, ValueTransformerSingleton {
var name = NSValueTransformerName(rawValue: "MyTransformation")
public static let instance = MyTransformer()或静态函数可以帮助您注册它
MyTransformer.register() // same as MyTransformer.instance.register()对于之前的枚举示例
enum StringTransformers: String, ValueTransformers, ValueTransformerType {
...
var name: NSValueTransformerName {
return NSValueTransformerName("String" + self.rawValue.capitalized)
}然后您可以逐个注册
StringTransformers.capitalized.register()或者所有情况
StringTransformers.register()一些实现
字符串
- 大写
- 全部大写
- 全部小写
图片
- PNG 表示
- JPEG 表示
日期和时间
- RFC 2822 时间戳*
- 使用
DateFormatter.Style
数字
- 使用
NumberFormatter.Style
区域组件
- 使用
NSLocale.Key
苹果文档
许可
ValueTransformerKit 根据 MIT 许可证提供。请参阅 LICENSE 文件获取更多信息。