[Swift 3.0] Swift3.0で、NSUserDefaultsはUserDefaultsになった
1 はじめに
NSUserDefaultsは、軽易にデータを保存管理する方法として、非常に多くの場面で利用されていると思いますが、このNSUserDefaultsも Swift 3.0でメソッド名が大きく変更されました。
まだ、UserDefaultsのリファレンスページもNSUserDefaultsの記載が残っていたり、纏まった記事もあまりヒットしなかった(というより、2.3の情報ばかりヒットしてしまう)ので、自分用の覚書として書きました。
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 最後に
まーここまで書いておいて、こう言ってはなんですが・・・NSUSerDefaultsのNSが無くなって、UserDefaultsに変わったことを記憶しておけば、後は、インテリセンスでなんとかなりそうです。