Created
September 11, 2017 15:53
-
-
Save yossan/4b85680f44965b2f16d6f75badcd225a to your computer and use it in GitHub Desktop.
Converting costom struct to Data in Swift3
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
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