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