Swift

Swiftで配列をNSUserDefaultsを使って保存・読み込み

More than 1 year has passed since last update.

Objective-Cとの大きな違い

Objective-Cでは、UserDefaultsで配列を保存した場合でも、保存と読み込みが1行で済む簡単なお仕事でした。
しかし、Swiftでは、型推定が実装されているため、配列の中身は何じゃろな?状態(AnyObject)では格納できませんよーというErrorではじかれてしまいました。
そこで、試行錯誤の末に解決できた方法を今回は紹介します。

NSUserDefaultsでの配列の保存

まずは配列の生成をする

Swift
//配列を生成
var names:[String] = ["カネキ", "トーカ", "リゼ", "ニシキ"]

//空の配列ならこのように生成
var names: [String] = []

次にNSUserDefaultsで保存してみる
保存はObjective-Cと同じように使える

Swift
//NSUserDefaultsのインスタンスを生成
let defaults = NSUserDefaults.standardUserDefaults()

//"NAME"というキーで配列namesを保存
defaults.setObject(names, forKey:"NAME")

// シンクロを入れないとうまく動作しないときがあります
defaults.synchronize()

NSUserDefaultsでの配列の読み込み

そして、ここからが本題
これが大変でした
ちなみに、あんまり美しい書き方ではなさそうなので、もっと良い書き方あるよ!って方は教えてください

Swift
//空の配列を用意
var names: [String] = []

//前回の保存内容があるかどうかを判定
if(defaults.objectForKey("NAME")){

    //objectsを配列として確定させ、前回の保存内容を格納
    let objects = defaults.objectForKey("NAME") as? NSArray

    //各名前を格納するための変数を宣言
    var nameString:AnyObject

    //前回の保存内容が格納された配列の中身を一つずつ取り出す
    for nameString in objects!{
        //配列に追加していく
        names.append(nameString as NSString)
    }
}