我是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
为什么会这样?
答案 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
,并且编译器会抱怨缺少可选项。