xyk blog

最近は iOS 開発の記事が多めです。

UserDefaultsのregisterDefaultsメソッドについて

環境: Swift3

UserDefaultsのregisterDefaultsメソッドについて勘違いしていたのでメモ。

// Swift3 で registerDefaults() から register(defaults: ) に変更になった
open func register(defaults registrationDictionary: [String : Any])

このregisterメソッドを使って登録したDictionary(以降RegistrationDictionaryと呼ぶ)はデフォルト値として使う用でUserDefaultsのデータとしてファイルに書き込まれるわけではない。
あるキーで読み込みした時にそのキーがまだUserDefaultsに存在せず、RegistrationDictionaryに存在すれば、RegistrationDictionaryの値をデフォルト値として返す。
既にキーがUserDefaultsに登録されていた場合、またはその後、そのキーでUserDefaultsに登録された場合は、UserDefaultsの値を返す。

let defaults = UserDefaults.standard

let foo1 = defaults.string(forKey: "Foo")
print("foo1:", foo1) // nil

defaults.register(defaults: ["Foo": "Bar"])

let foo2 = defaults.string(forKey: "Foo")
print("foo2:", foo2) // Optional("Bar")

UserDefaults.standard.set("Hoge", forKey: "Foo")
defaults.synchronize()

let foo3 = defaults.string(forKey: "Foo")
print("foo3:", foo3) // Optional("Hoge")