Help us understand the problem. What is going on with this article?

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

More than 5 years have 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)
    }
}

cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。
http://www.cyberagent.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした