我正在尝试计算每个孩子的饼干数量。 它给出了一个错误:
错误:可选类型的值' Int?'没有打开;你的意思是 使用'!'或者'?'?
let noOfCookies = 50
var noOfChildren : String = "5"
let typeOfCookies = "Oreo"
print("\(typeOfCookies) can be split among \(noOfChildren)
and each gets \(noOfCookies/Int(noOfChildren))")
答案 0 :(得分:3)
Int(noOfChildren)
尝试获取String并将其转换为int,返回可选的Int 或Int?
。例如,如果noOfChildren
是" fish"而不是" 5",Int(noOfChildren)
会返回nil
,因为它无法转换。这就是为什么你有一个可选的Int?
。您可以通过以下几种方式处理打开可选项:
let myInt = Int(noOfChildren)!
。这将立即消除可选项,但同样,如果noOfChildren
是" fish",您的应用程序将崩溃,因为它无法强制解包。let myInt = Int(noOfChildren) ?? 0
。这将尝试打开它,如果我们得到nil
,它默认为第二个值(0)。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的转换