类型安全的值转换器,包含错误处理,灵感来自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
对象,其中包含转换(或逆向转换)的结果或错误。这使您能够优雅地处理转换错误。