-
Notifications
You must be signed in to change notification settings - Fork 196
Expand file tree
/
Copy pathValueTransformer.swift
More file actions
46 lines (35 loc) · 1.34 KB
/
ValueTransformer.swift
File metadata and controls
46 lines (35 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//
// ValueTransformer.swift
// Moody
//
// Created by Florian on 15/05/15.
// Copyright (c) 2015 objc.io. All rights reserved.
//
import Foundation
class ClosureValueTransformer<A: AnyObject, B: AnyObject>: ValueTransformer {
typealias Transform = (A?) -> B?
typealias ReverseTransform = (B?) -> A?
fileprivate let transform: Transform
fileprivate let reverseTransform: ReverseTransform
init(transform: @escaping Transform, reverseTransform: @escaping ReverseTransform) {
self.transform = transform
self.reverseTransform = reverseTransform
super.init()
}
static func registerTransformer(withName name: String, transform: @escaping Transform, reverseTransform: @escaping ReverseTransform) {
let vt = ClosureValueTransformer(transform: transform, reverseTransform: reverseTransform)
Foundation.ValueTransformer.setValueTransformer(vt, forName: NSValueTransformerName(rawValue: name))
}
override static func transformedValueClass() -> AnyClass {
return B.self
}
override class func allowsReverseTransformation() -> Bool {
return true
}
override func transformedValue(_ value: Any?) -> Any? {
return transform(value as? A)
}
override func reverseTransformedValue(_ value: Any?) -> Any? {
return reverseTransform(value as? B)
}
}