Skip to content

Instantly share code, notes, and snippets.

@yossan
Created September 11, 2017 15:53
Show Gist options
  • Save yossan/4b85680f44965b2f16d6f75badcd225a to your computer and use it in GitHub Desktop.
Save yossan/4b85680f44965b2f16d6f75badcd225a to your computer and use it in GitHub Desktop.
Converting costom struct to Data in Swift3
import Foundation
do {
struct Token {
var dict: [String: Any]? = nil
init(dictionary: [String: Any]) {
self.dict = dictionary
}
func data() -> Data {
let pointer = UnsafeMutablePointer<Token>.allocate(capacity: 1)
pointer.initialize(to: self, count: 1)
let bufferPointer = UnsafeBufferPointer(start: pointer, count: 1)
let data = Data(buffer: bufferPointer)
pointer.deallocate(capacity: 1)
return data
}
}
class Manager {
func save(token: Token) {
let data = token.data()
try! data.write(to: self.saveFilePath)
}
func loadToken() -> Token {
let data = try! Data(contentsOf: self.saveFilePath)
return data.withUnsafeBytes { (pointer: UnsafePointer<Token>) -> (Token) in
return pointer.pointee
}
}
var saveFilePath: URL {
let cacheDir = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!
let saveDir = cacheDir.appendingPathComponent("tokens", isDirectory: true)
if FileManager.default.fileExists(atPath: saveDir.path) == false {
try! FileManager.default.createDirectory(at: saveDir, withIntermediateDirectories: false)
}
return saveDir.appendingPathComponent("temp.token")
}
}
class Main {
func saveTest() {
let token = Token(dictionary: ["name": "yoshimoto", "age": 34])
let manager = Manager()
manager.save(token: token)
}
func loadTest() -> Token {
let manager = Manager()
let token = manager.loadToken()
return token
}
func test() {
self.saveTest()
let token = self.loadTest()
print(token.dict!)
print(token.dict!["name"]!)
}
}
let main = Main()
main.test()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment