Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save nubbel/5b0a5cb2bf6a2e353061 to your computer and use it in GitHub Desktop.
Save nubbel/5b0a5cb2bf6a2e353061 to your computer and use it in GitHub Desktop.
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.Type))
data.getBytes(pointer)
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"
}
@Kalvin126
Copy link

I have an NSArray of Struct of which I writeToFile after encode each struct. If I read the saved plist in the same instance, I can read the data back perfectly but when I rerun and reload the data, it only partially decodes each struct. What gives?

@JoshuaKaden
Copy link

Awesome; thank you!

@100mango
Copy link

It won't work, if you have an array in your struct.

@RollingGoron
Copy link

Any reason why you would want to use this over Struct to NSData via NSJSONSerilization?

@Nathan187
Copy link

Yes, this use to work for me too. It works on simple structs but as it get more complex, nil is always returned. Anyone else experience this?

@bruno-rocha-movile
Copy link

It seems to fail sometimes, returns nil once in a while even without changing anything on the struct

@nullpixel
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment