2016-02-27 38 views
0

我試圖來管理這樣一個變量:如果NSUserDefaults的從()獲取時let子句

var isFinished: Bool { 
    get { 
     return NSUserDefaults.standardUserDefaults().boolForKey("isFinished") 
    } 
    set { 
     NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 
    } 

這工作,但我試圖得到時使其更加安全通過使用if let :「從‘布爾’到‘布爾’總是會成功的條件演員。」

var isFinished: Bool { 
    get { 
     if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") as? Bool { 
     return isFinished 
     } 
    } 
    set { 
     NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 
    } 

這雖然給一個黃色的錯誤

好吧:

if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") { 
    return isFinished 
} 

現在更糟糕的是:「初始值設定條件結合必須有可選的類型,而不是‘布爾’」

什麼是處理這個正確的方式?

回答

3

您的主要方法很好。

boolForKey of NSUserDefaults不返回可選項,因此任何可選的綁定嘗試都沒有意義。

func boolForKey(_ aKey: String) -> Bool 

如果一個布爾值與指定鍵相關聯,該值是 返回。如果未找到該鍵,則此方法返回NO。

+0

我希望他們改變這種情況,自選將是完美的這一點。 –

+0

@TimVermeulen根據蘋果的建議,爲'NSUserDefaults'註冊默認值,根本不需要可靠的狀態選項。 – vadian

+0

謝謝,我不知道這個! – nontomatic

1

你需要這樣寫: -

if let isFinished : Bool = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") 
{ 
     return isFinished 
} 

希望這將幫助你:)

+0

這將引發條件綁定的*初始化必須有可選類型,而不是'Bool'*錯誤 – vadian

+0

@vadian它在Xcode7中工作正常 –

+0

感謝您的回答,N.Raval,我接受了其他答案,因爲它似乎是蘋果的建議,像我這樣的人可能不知道這是實際處理的方式。因爲你的答案確實有用,所以我給了它一個贊成票。 – nontomatic