一个基于闭包和协议的框架,用于 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()
DateFormatter.StyleNumberFormatter.StyleNSLocale.KeyIsEmpty(或 IsNotEmpty)您可以将 String、NSString、Array、NSArray、Dictionnary 等转换为布尔值。如果为空,则为 true(或 false)ValueTransformerKit 基于 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。