struct-archiverって何?
Swift向けの構造体とNSDataを相互変換するステキライブラリです。構造体を含む配列も容易に変換することができ、データの送受信や記録などに便利です。
構造体の定義
CustomArchivable
を継承?した構造体を定義する。
struct SomeStruct: CustomArchivable {
var id: String
var name: String
// `restoreProcedure` を記述して構造体を返す必要がある
public static var restoreProcedure: ArchiveRestoreProcedure {
return {
(dictionary: ArchivableDictionary) in
// 復元時に辞書が渡ってくるので値を取得して構造体を返すように
if let id = dictionary["id"] as? String, let name = dictionary["name"] as? String {
return NearbyTelemetrySessionStruct(id: id, name: name)
}
return NearbyTelemetrySessionStruct(id: "", name: "")
}
}
}
struct-archiverの初期化
AppDelegate
内で SomeStruct
をstruct-archiverで取り扱えるようにする。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
StructArchiver.activateStandardArchivables(withCustomStructActivations: {
// struct-archiverを使う構造体を列挙
SomeStruct.activateArchive()
})
return true
}
ArrayとNSDataの相互変換
NSDataにする
let a = SomeStruct(id: "a", name: "a")
let b = SomeStruct(id: "b", name: "b")
let c = SomeStruct(id: "c", name: "c")
// 配列の場合は **Archivables型として扱う**
let array: Archivables = [a, b, c]
let data = array.archivedData
Arrayにする
let array = StructArchiver.unarchive(data: data)