LoginSignup
101
95

More than 5 years have passed since last update.

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

Posted at

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)
    }
}

101
95
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
95