ValueTransformerKit

Build Status Swift 5.1 Stargazers Issues MIT License Sponsor Become a Patron! Buy me a coffee

一个基于闭包和协议的框架,用于 ValueTransformer,以及通过标识符注册 ValueTransformer 的实用函数。

请参阅 一些实现

创建一个 ValueTransformer

使用闭包

let transformer = ValueTransformer.closure { object in
   return ...
}

使用此方法不再需要 ValueTransformer 子类。

使用协议实现

实现 ValueTransformerTypeResersableValueTransformerType,即可访问计算属性 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()

一些实现

字符串

图像

日期和时间

数字

本地化组件

检查是否为空

Apple 文档

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ValueTransformers/ValueTransformers.html

许可证

ValueTransformerKit 基于 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。