为什么 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
}
我在这行代码中声明了一个常量,但是如果我不把 `!在它之后,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
.
您可以指定一个默认值:
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
}