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

Why does Xcode think this is an optional?

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

value of optional type string must be unwrapped.

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

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

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

查看 UserDefaults string(forKey:) 的文档。它有一个 return 类型的 String?。它 return 是可选的,因为给定的键可能没有值。

因此您尝试将 String? 分配给 String 会导致错误。强制解包(添加 !)解决了错误,但这是最糟糕的解决方案,因为现在如果键没有值,您的应用程序将崩溃。

UserDefaults.

中key没有值的情况请妥善处理

您可以指定一个默认值:

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

或者你可以有条件地处理没有值:

if let jbEmail = userDefaults.string(forKey: "JBemail_preference") {
    // Do something with jbEmail
} else {
    // There is no value, do something else
}