2015-09-18 19 views
0

要想從NSUserDefaults的值,我會做這樣的事情:如何應對非可選值NSUserDefaults的斯威夫特

let userDefaults = NSUserDefaults.standardUserDefaults() 
if let value = userDefaults.objectForKey(key) { 
    print(value) 
} 

然而,這些方法不返回選配:

  • boolForKey(默認爲false如果未設定)
  • integerForKey(默認爲0如果未設定)
  • floatForKey(默認爲0.0如果未設置)
  • doubleForKey(默認爲0.0如果未設置)

在我的應用我想如果先前已設置爲使用一個整數的保存價值。如果它以前沒有設置,我想使用我自己的默認值。問題是0是我的應用程序的有效整數值,所以我無法知道0是以前保存的值還是默認的未設置值。

我該如何處理?

回答

2

註冊在AppDelegate的用戶默認值合法違約,最好的地方是awakeFromNib甚至init。您可以爲每個鍵提供自定義的默認值。

override init() 
{ 
    let defaults = NSUserDefaults.standardUserDefaults() 
    let defaultValues = ["key1" : 12, "key2" : 12.6] 
    defaults.registerDefaults(defaultValues) 
    super.init() 
} 

然後你就可以作爲非自選

let defaults = NSUserDefaults.standardUserDefaults() 
myVariable1 = defaults.integerForKey("key1") 
myVariable2 = defaults.doubleForKey("key2") 
+0

是的,我忘了,我改變了後 – vadian

+0

我假設你不使用硬編碼字符串'「鍵1生產代碼中的「'和'」key2「'。在整個應用程序中訪問這些關鍵名稱的最佳位置在哪裏? – Suragch

+1

可以將任何類之外的鍵定義爲全局變量,或者在任何類之外使用靜態結構,例如'struct Key {static let Max =「max」static let Min =「min」}'。然後你可以用'defaults.integerForKey(Key.Max)'來使用它。結構的好處是封裝數據 – vadian

-1

使用此代碼

let userDefaults = NSUserDefaults.standardUserDefaults() 
if var value : Int = userDefaults.objectForKey(key) { 
    print(value) 
} 
2

來自世界各地總是讀值我剛剛發現的東西,似乎工作。我可以繼續使用objectForKey(它會返回一個可選項)並使用as?可選地將其轉換爲Int

if let myInteger = userDefaults.objectForKey(key) as? Int { 
    print(myInteger) 
} else { 
    print("no value was set for this key") 
} 

BoolFloatDouble的解決方案,將工作方式相同。

0

本文介紹得非常好如何「做」出來可選http://radex.io/swift/nsuserdefaults/

extension NSUserDefaults { 
    class Proxy { 
     var object: NSObject? { 
      return defaults.objectForKey(key) as? NSObject 
     } 

     var number: NSNumber? { 
      return object as? NSNumber 
     } 

     var int: Int? { 
      return number?.integerValue 
     } 

     var bool: Bool? { 
      return number?.boolValue 
     } 
    } 
}