[Swift 3.0] Swift3.0で、NSUserDefaultsはUserDefaultsになった

2016.11.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

NSUserDefaultsは、軽易にデータを保存管理する方法として、非常に多くの場面で利用されていると思いますが、このNSUserDefaultsも Swift 3.0でメソッド名が大きく変更されました。

まだ、UserDefaultsのリファレンスページもNSUserDefaultsの記載が残っていたり、纏まった記事もあまりヒットしなかった(というより、2.3の情報ばかりヒットしてしまう)ので、自分用の覚書として書きました。

001

2 インスタンス生成

ここが、一番変わっていると思います。この辺をキーにして検索すると、Swift3.0の情報に辿り着きやすいと思います。

Swift2.3

let userDeaults = NSUserDefaults.standardUserDefaults()

Swift3.0

let userDefaults = UserDefaults.standard

3 保存

保存のメソッドは、set(_:forKey:)だけになり、第1パラメータの型を推論して適切なメソッドがコールされる形になりました。

Swift2.3

.setBool(true, forKey: "Key")
.setInteger(1, forKey: "Key")
.setObject("TEST", forKey: "Key")

Swift3.0

.set(true, forKey: "Key")
.set(1, forKey: "Key")
.set("TEST", forKey: "Key")

4 読み込み

Swift APIのガイドラインに従って、メソッド名が短くなっています。

Swift2.3

.boolForKey("Key")
.integerForKey("Key")
.stringForKey("Key")

Swift3.0

.bool(forKey: "Key")
.integer(forKey: "Key")
.string(forKey: "Key")

5 削除

Swift APIのガイドラインに従って、メソッド名が短くなっています。

Swift2.3

.removeObjectForKey("Key")

Swift3.0

.removeObject(forKey: "Key")

6 存在確認

Swift APIのガイドラインに従って、メソッド名が短くなっています。

Swift2.3

if ((userDefaults.objectForKey("Key")) != nil) {
    print("データ有り")
}

Swift3.0

if (userDefaults.object(forKey: "Key") != nil) {
    print("データ有り")
}

7 デフォルト値

Swift APIのガイドラインに従って、メソッド名が短くなっています。

Swift2.3

.registerDefaults(["Key": "default"])

Swift3.0

.register(defaults: ["Key": "default"])

8 同期

変わっていません。

Swift2.3 / Swift3.0

.synchronize()

9 最後に

まーここまで書いておいて、こう言ってはなんですが・・・NSUSerDefaultsNSが無くなって、UserDefaultsに変わったことを記憶しておけば、後は、インテリセンスでなんとかなりそうです。

10 参考資料


API Reference UserDefaults
API Reference NSUserDefaults