条件绑定的初始化程序必须具有Optional类型,即使它是Optional类型也是如此

时间:2019-02-11 09:37:56

标签: swift

我遇到了一个我不明白的错误,因为我以为我知道解开条件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)
}

2 个答案:

答案 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

一样重置它,也可以将其设为var

答案 1 :(得分:1)

要使用的var必须为可选,并且此

imNotSet!

不是,所以替换

if let unwrappedVar = imNotSet! {

使用

guard let unwrappedVar = imNotSet else { return }