2014-11-04 77 views
1

我試圖從NSUserDefaults獲取一個值,我試圖設置一個變量爲這個。問題是我不確定我是如何解開它的?從NSUserDefaults發佈解包字符串

這是我的代碼:

var defaults = NSUserDefaults(suiteName: "group.AffordIt") 
    currentBudgetCalculation = defaults?.stringForKey("currentBudgetWidget")! 

此刻,我剛上車,指出第二行的錯誤:

Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'? 

如果我嘗試使用建議的解決方案,它只是增加了一個!到行尾,但這顯然不能解決問題。

回答

2

你試過這個嗎?

currentBudgetCalculation = defaults!.stringForKey("currentBudgetWidget")! 
+0

啊。你的回答幾乎是正確的,但是它的'currentBudgetCalculation = defaults!.stringForKey(「currentBudgetWidget」)!' – user3746428 2014-11-04 10:04:11

+0

對不起,我編輯它。只是錯過了一個'!'。 – user3746428 2014-11-04 10:06:26

+0

我不得不等待時限到期,但我現在已經完成了。謝謝! – user3746428 2014-11-04 10:30:35

2

注意,使用強制展開操作!不建議,因爲它會產生一個運行時錯誤,如果選購的是nil

一個更好的辦法是使用可選的綁定,這使你的代碼更安全,更容易出現異常,尤其是當你不知道一個可選的變量是否實際上包含了非零值:

var defaults: NSUserDefaults? = NSUserDefaults(suiteName: "group.AffordIt") 

if let defaults = defaults { 
    if let currentBudgetCalculation: String = defaults.stringForKey("currentBudgetWidget") { 
     // Here you are 100% sure currentBudgetCalculation contains a non nil value 
    } 
} 

一般而言,我總是避免強制解包運算符!,除非它是我從我自己的代碼中分配一個非零值 - 將它用於由函數或方法返回的某些內容可能是頭痛的原因,試圖找出應用程序爲什麼會崩潰原因。這在官方文檔If Statements and Forced Unwrapping中有提及:

試圖使用!訪問不存在的可選值會觸發運行時錯誤。在使用之前,務必確保可選項包含非零值!強迫 - 解開其價值。