Güncelleme Swift 2, Xcode 7 için: @atxe fark gibi, NSUserDefaults sözlükleri şimdi [String, AnyObject]
olarak eşlenir. Bu anahtarları yalnızca dizeleri olabilir sözlüğe mülkiyet listeleri olmalıdır
- (NSDictionary<NSString *,id> *)dictionaryForKey:(NSString *)defaultName
(Varsayılan nesneler olarak ve özellikle Objective-C yöntem bildirmek için izin "hafif jenerik" Objective-C bir sonucudur .))
Öte yandan
, bir Swift Sözlük otomatik mümkünse köprülü, bu nedenle söz orijinal kod tekrar (çalışır:
let jo = [
"a" : "1.0",
"b" : "2.0"
]
let akey = "aKey"
// Swift 2:
userDefaults.setObject(jo, forKey: akey)
// Swift 3:
userDefaults.set(jo, forKey: akey)
için orijinal cevap Swift 1.2: Kullanıcı varsayılanları NSDictionary
nesnelerini kaydedebilir.
var jo : [NSObject : AnyObject] = [
"a" : "1.0",
"b" : "2.0"
]
userDefaults.setObject(jo, forKey: akey)
var isOk = userDefaults.synchronize()
Ve dictionaryForKey()
opsiyonel döndüren unutmayın, bu nedenle isteğe bağlı atama ile örneğin kontrol etmelidir: Bunlar [NSObject : AnyObject]
olarak Swift eşlenir
if let data0 = userDefaults.dictionaryForKey(akey) {
print(data0)
} else {
print("not set")
}
// Output: [b: 2.0, a: 1.0]
doğru! Anahtar açık bir şekilde beyan etmektir: var jo: [NSObject: AnyObject] yukarıda belirttiğiniz gibi. – Sean
Başka bir şekilde (bir sebepten dolayı bildirimi açıklayamazsanız) "NSDictionary olarak" kullanmak olacaktır: userDefaults.setObject ((NSDictionary olarak jo), forKey: aKey) – winterized
Swift 2.0'da NSUserDefault sözlükleri eşleştirilir olarak [String: AnyObject].Aslında bir Sözlükü Int (örneğin) anahtar olarak kaydetmeye çalışırsanız, çalışma zamanında başarısız olur. Apple tarafından sağlanan böylesine basit bir yönteme sahip olmak güzel olsa da, olası bir çalışma zamanı hatasını güvenli bir şekilde desteklemek ve bunlardan kaçınmak için uzantınızı güçlü bir yazım yöntemiyle tanımlayabilirsiniz. – atxe