无法在可选绑定中使用可选 int "possibleNumber"

unable to use optional int "possibleNumber" in optional binding

我是 Swift 的新手,正在尝试学习可选绑定的概念。我想出了以下代码:

let possibleNumber = Int("123")
possibleNumber.dynamicType
if let actualNumber = Int(possibleNumber){
    print("\(possibleNumber) has an integer value of \(actualNumber)")
} else {
    print("\(possibleNumber) could not be converted to an int")
}

Xcode playground 输出错误信息:

value of optional type "int?" not unwrapped, did you mean to use "!" or "?"

但是,当我添加“!”至 if let actualNumber = Int(possibleNumber!){

let possibleNumber = Int("123")
possibleNumber.dynamicType
if let actualNumber = Int(possibleNumber!){
    print("\(possibleNumber) has an integer value of \(actualNumber)")
} else {
    print("\(possibleNumber) could not be converted to an int")
}

Xcode 显示另一条错误消息:

initialiser for conditional binding must have Optional type, not int

为什么会这样?

if let构造中

if let actualNumber = Int(possibleNumber!){
    print("\(possibleNumber) has an integer value of \(actualNumber)")
}

您不需要使用 Int 初始值设定项。你只需要写

if let actualNumber = possibleNumber {
    print("\(possibleNumber) has an integer value of \(actualNumber)")
}

现在 Swift 将尝试解包 possibleNumber。如果操作成功,解包后的值将被放入 actualNumber 并执行 THEN 块。

的结果
let possibleNumber = Int("123")

是一个可选的 Int - Int?

那么你正试图用

创建另一个Int
Int(possibleNumber)

这不起作用,因为初始化程序需要一个非可选类型。 错误消息与初始化程序有关,而不是与可选绑定有关。

尝试此操作以获得相同的错误消息。

let possibleNumber = Int("123")
let x = Int(possibleNumber)

在您的第二个示例中,当您使用隐式展开的 Int! 参数初始化 Int 时,您会得到一个非可选的 Int 并且编译器会抱怨缺少可选的。