Skip to content

Instantly share code, notes, and snippets.

@dagronf
Created July 20, 2020 02:33
Show Gist options
  • Select an option

  • Save dagronf/ee0bf6df255b15d1e38fa013c502066b to your computer and use it in GitHub Desktop.

Select an option

Save dagronf/ee0bf6df255b15d1e38fa013c502066b to your computer and use it in GitHub Desktop.
Swift-based Data to String reversible ValueTransformer supporting different string encodings (allowing binding from NSData to NSTextField and back for example)
@objc class DataToStringReversableTransformer: ValueTransformer {
static func RegisterTransformer() {
ValueTransformer.setValueTransformer(
DataToStringReversableTransformer(encoding: .utf8),
forName: NSValueTransformerName("DataToStringReversableTransformer_utf8")
)
ValueTransformer.setValueTransformer(
DataToStringReversableTransformer(encoding: .utf16),
forName: NSValueTransformerName("DataToStringReversableTransformer_utf16")
)
}
let encoding: String.Encoding
init(encoding: String.Encoding) {
self.encoding = encoding
super.init()
}
override class func transformedValueClass() -> AnyClass {
return NSString.self
}
override class func allowsReverseTransformation() -> Bool {
return true
}
override func transformedValue(_ value: Any?) -> Any? {
if let v = value as? Data {
return String(data: v, encoding: self.encoding)
}
return nil
}
override func reverseTransformedValue(_ value: Any?) -> Any? {
if let v = value as? String {
return v.data(using: self.encoding)
}
return nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment