无法在可选绑定中使用可选 int "possibleNumber"
Posted
技术标签:
【中文标题】无法在可选绑定中使用可选 int "possibleNumber"【英文标题】:unable to use optional int "possibleNumber" in optional binding 【发布时间】:2016-02-25 10:26:28 【问题描述】:我是 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
为什么会这样?
【问题讨论】:
【参考方案1】:结果
let possibleNumber = Int("123")
是一个可选的 Int - Int?
然后你尝试用
创建另一个Int
Int(possibleNumber)
这不起作用,因为初始化程序需要一个非可选类型。 错误消息与初始化程序有关,而不是与可选绑定有关。
试试这个以获得相同的错误消息。
let possibleNumber = Int("123")
let x = Int(possibleNumber)
在第二个示例中,当您使用隐式展开的 Int!
参数初始化 Int
时,您会得到一个非可选的 Int
并且编译器会抱怨缺少可选参数。
【讨论】:
我是否正确地说,对于第二个示例,语句 if let actualNumber = Int(possibleNumber), actualNumber 应该是可选类型,但是,Int(possibleNumber!) 是相等的到非可选的 int 类型,这就是 XCode 抱怨的原因?【参考方案2】:在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
块。
【讨论】:
以上是关于无法在可选绑定中使用可选 int "possibleNumber"的主要内容,如果未能解决你的问题,请参考以下文章