ValueTransformer 1.0.2

ValueTransformer 1.0.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2015年4月
SPM支持SPM

Felix Jendrusch维护。



类型安全的值转换器,包含错误处理,灵感来自Mantle 2.0的 MTLTransformerErrorHandling

安装

用法

ValueTransformer

ValueTransformer支持基于闭包的前向值转换。它遵循ValueTransformerType

let uppercase = ValueTransformer<String, String, NSError> { value in
  return success(value.uppercaseString)
}

let result = uppercase.transform("example") // "EXAMPLE"

>>><<<

值转换器可以通过左右组合运算符(分别对应>>><<<)链式连接。

let join = ValueTransformer<[String], String, NSError> { values in
  return success(" ".join(values))
}

let result = (join >>> uppercase).transform([ "hello", "world" ]) // "HELLO WORLD"

lift(可选)

值转换器的值和转换后的值类型可以提升到Optional

let lifted: ValueTransformer<String, String?, NSError> = lift(uppercase)

let result = lifted.transform("example") // .Some("EXAMPLE")
let lifted: ValueTransformer<String?, String, NSError> = lift(uppercase, defaultTransformedValue: "default")

let result1 = lifted.transform("example") // "EXAMPLE"
let result2 = lifted.transform(nil) // "default"
let lifted: ValueTransformer<String?, String?, NSError> = lift(uppercase)

let result = lifted.transform(nil) // nil

lift(数组)

值转换器的值和转换后的值类型也可以提升到Array

let lifted: ValueTransformer<[String], [String], NSError> = lift(uppercase)

let result = lifted.transform([ "hello", "world" ]) // [ "HELLO", "WORLD" ]

lift(字典)

字典也可以提升到值转换器。

let lifted = lift([ "one": 1 ], defaultTransformedValue: 0)

let result1 = lifted.transform("one") // 1
let result2 = lifted.transform("two") // 0

ReversibleValueTransformer

ReversibleValueTransformer支持基于闭包的前向和后向值转换。它遵循ReversibleValueTransformerType,该类型又遵循ValueTransformerType

let caze = ReversibleValueTransformer<String, String, NSError>(transformClosure: { value in
  return success(value.uppercaseString)
}, reverseTransformClosure: { transformedValue in
  return success(transformedValue.lowercaseString)
})

let result1 = caze.transform("example") // "EXAMPLE"
let result2 = caze.reverseTransform("EXAMPLE") // "example"

ValueTransformer可以应用的操作也可以应用于ReverisbleValueTransformer。此外,还支持以下操作。

combine

可以将两个合适的值转换器组合成一个可逆值转换器。

let lowercase = ValueTransformer<String, String, NSError> { value in
  return success(value.lowercaseString)
}

let combined = combine(uppercase, lowercase)

let result1 = combined.transform("example") // "EXAMPLE"
let result2 = combined.reverseTransform("EXAMPLE") // "example"

flip

可以翻转可逆值转换器。

let flipped = flip(combined)

let result1 = flipped.transform("EXAMPLE") // "example"
let result2 = flipped.reverseTransform("example") // "EXAMPLE"

lift(可选)

在将可逆值转换器的转换后的值类型提升到Optional时,必须提供默认的反转换值。

let lifted = lift(flipped, defaultReverseTransformedValue: "default")

let result1 = lifted.reverseTransform("example") // "EXAMPLE"
let result2 = lifted.reverseTransform(nil) // "default"

错误处理

所有转换及其逆向转换都返回一个 LlamaKit.Result 对象,其中包含转换(或逆向转换)的结果或错误。这使您能够优雅地处理转换错误。