-1

我是 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

为什么会这样?

4

2 回答 2

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 将尝试 unwrap possibleNumber。如果操作成功,则将展开的值放入actualNumber其中并THEN执行块。

于 2016-02-25T10:39:05.253 回答
1

的结果

let possibleNumber = Int("123")

是一个可选的 Int -Int?

然后你试图Int

Int(possibleNumber)

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

试试这个以获得相同的错误消息。

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

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

于 2016-02-25T10:42:20.037 回答