为什么我不能将noOfChildren转换为Integer?

时间:2017-01-11 19:21:58

标签: swift

我正在尝试计算每个孩子的饼干数量。 它给出了一个错误:

  

错误:可选类型的值' Int?'没有打开;你的意思是   使用'!'或者'?'?

let noOfCookies = 50
var noOfChildren : String = "5"
let typeOfCookies = "Oreo"

print("\(typeOfCookies) can be split among \(noOfChildren) 
and each gets \(noOfCookies/Int(noOfChildren))")

2 个答案:

答案 0 :(得分:3)

Int(noOfChildren)尝试获取String并将其转换为int,返回可选的Int Int?。例如,如果noOfChildren是" fish"而不是" 5",Int(noOfChildren)会返回nil,因为它无法转换。这就是为什么你有一个可选的Int?。您可以通过以下几种方式处理打开可选项:

  • 强行打开它:let myInt = Int(noOfChildren)!。这将立即消除可选项,但同样,如果noOfChildren是" fish",您的应用程序将崩溃,因为它无法强制解包。
  • Nil合并它:let myInt = Int(noOfChildren) ?? 0。这将尝试打开它,如果我们得到nil,它默认为第二个值(0)。
  • 使用if语句检查它是否存在:if let myInt = Int(noOfChildren) { ... }。在内部进行打印或其他任何内容,myInt将是非可选的。

如果你想继续使用Swift,你会想要阅读有关选项的内容;他们是一个重要话题。

答案 1 :(得分:1)

这是因为Int(String)会返回Int?类型。您无法使用可选类型执行数学运算。试试这个:

let noOfCookies = 50
var noOfChildren : String = "5"
let typeOfCookies = "Oreo"

if let numChildren = Int(noOfChildren) {
    print("\(typeOfCookies) can be split among \(noOfChildren) and each gets \(noOfCookies/numChildren)")
} else {
    // Handle inability to convert String to Int
}

我喜欢@ ConnorNeville在他的回答中的解释。我认为这是他列出的三个中最好的方法,因为你想知道是否/何时你不能执行从String到Int的转换