无法在可选绑定中使用可选的int“possibleNumber”

时间:2016-02-25 10:26:28

标签: xcode swift optional 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

为什么会这样?

2 个答案:

答案 0 :(得分:1)

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块。

答案 1 :(得分:1)

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

是可选的Int - Int?

然后您尝试使用

创建另一个Int
Int(possibleNumber)

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

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

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

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