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 文件获取更多信息。