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