为什么Xcode认为这是可选的?

时间:2019-06-10 16:29:27

标签: swift optional

我在这行代码中声明了一个常量,但是如果我不输入`!之后,xXcode给出错误提示:

  

可选类型字符串的值必须解包。

为什么Xcode认为这是可选的?我只是声明一个String类型的常量,并将其分配给用户将在设置部分中设置的键。

也许是因为我正在使用UserDefault设置,但尚未设置吗?如果是这样,我该如何解决?

let jbEmail: String = userDefaults.string(forKey: "JBemail_preference")!

1 个答案:

答案 0 :(得分:1)

请参阅 /* list=['a','b'] list=[] list="" */ ${empty list}//false ${empty list1}//true ${empty list2}//true 的文档。返回类型为UserDefaults string(forKey:)。它返回一个可选值,因为给定键可能没有值。

因此,尝试将String?分配给String?会导致错误。强制解包(添加String)可以解决该错误,但这是最糟糕的解决方案,因为如果密钥没有任何值,那么您的应用将崩溃。

您应该正确处理!中的键没有值的情况。

您可以分配默认值:

UserDefaults

或者您可以有条件地处理没有价值的事情:

let jbEmail = userDefaults.string(forKey: "JBemail_preference") ?? "Some Default"