Forked from nubbel/Swift: Convert structs and enums to NSData and vice-versa
Last active
February 24, 2016 20:33
-
-
Save tomconroy/bfe2e528666c3ce576c7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func encode<T>(var value: T) -> NSData { | |
return withUnsafePointer(&value) { p in | |
NSData(bytes: p, length: sizeofValue(value)) | |
} | |
} | |
func decode<T>(data: NSData) -> T { | |
let pointer = UnsafeMutablePointer<T>.alloc(sizeof(T)) | |
data.getBytes(pointer, length: sizeof(T)) | |
return pointer.move() | |
} | |
// Example: | |
enum Result<T> { | |
case Success(T) | |
case Failure | |
} | |
var res: Result<String> = .Success("yeah") | |
var data = encode(res) | |
var decoded: Result<String> = decode(data) | |
switch decoded { | |
case .Failure: | |
"failure" | |
case .Success(let v): | |
"success: \(v)" // => "success: yeah" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment