我遇到了一个我不明白的错误,因为我以为我知道解开条件var / let。但是,如果我收到所提供的错误,尝试在其中强行打开包装。
错误:
Initializer for conditional binding must have Optional type, not 'String'
代码:
let imNotSet: String?
print(type(of: imNotSet)) // Optional<String>
if let unwrappedVar = imNotSet! { // error on this line
print(unwrappedVar)
}
答案 0 :(得分:3)
if let unwrappedVar = imNotSet! { // error on this line
print(unwrappedVar)
}
imNotSet!
强制展开了imNotSet。因此,它不再是可选的,而是字符串。
要使其保留为可选,请移除强制展开。
if let unwrappedVar = imNotSet { // error fixed
print(unwrappedVar)
}
if let
使您可以安全地解开可选文件,这与之前的强制解包不同。
对于Constant 'imNotSet' used before being initialized
错误,如果它确实是一个常量,则在使用它之前,先为它提供一个类似let imNotSet: String? = "Sample"
的值。如果您以后需要像var imNotSet: String? = nil
答案 1 :(得分:1)
要使用的var
必须为可选,并且此
imNotSet!
不是,所以替换
if let unwrappedVar = imNotSet! {
使用
guard let unwrappedVar = imNotSet else { return }