从NSUserDefaults发出解包字符串

时间:2014-11-04 10:00:09

标签: ios swift 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 个答案:

答案 0 :(得分:2)

你试过这个吗?

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

答案 1 :(得分: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中提到了这一点并附注:

  

尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请务必确保可选项包含非零值!强行解开它的价值。