func add(numbers: Int...) -> Int?
{
var total:Int?
for i in numbers
{
total += i // >> 'int?' is not identical to 'Uint8' in swift
}
return total
}
数字是Int,为什么总数不能分配给Int?
答案 0 :(得分:2)
你得到的错误可能有点欺骗。这里的根本问题是您声明了total
类型的变量Int?
,但实际上从未为其赋值。由于total
未被赋予整数值,因此尝试按i
递增它是没有意义的。
您可以通过将total
变量初始化为零来解决此问题。同样值得注意的是,你的总和返回类型不需要在这里作为选项,因为你将可变数量的非可选Ints作为输入,这意味着你的输入总是在加在一起时总计。
如果您在此处涉及保留选项,那么以下代码将起作用。
func add(numbers: Int...) -> Int? {
var total: Int? = 0
for i in numbers {
total! += i
}
return total
}
请注意,变量total
在递增时被强制解包。如果总和为零(即未给出初始值),则会崩溃。但这真的是没有必要的。正如我上面解释的那样,根本不需要在这里使用选项。相反,我建议实现这样的功能。
func add(numbers: Int...) -> Int {
var total = 0
for i in numbers {
total += i
}
return total
}
如果您对函数的替代品感兴趣可能更加Swifty,您可以像这样重写整个函数:
func add(numbers: Int...) -> Int {
return reduce(numbers, 0, +)
}
答案 1 :(得分:0)
您的代码无论如何都不会工作。您尝试将数字添加到尚未初始化的变量中。所以返回总是nil
所以改变:
var total:Int?
到那个:
var total:Int? = 0
但您也可以删除?
,因为它不是必需的,因为您将使用非可选参数。
var total:Int = 0
答案 2 :(得分:0)
总计不是Int
是Optional(Int)
,您需要打开才能成为Int
您可以通过两种方式实现这一目标,更快,更安全:
更快:return total!
更安全的:
if let total = total {return total}
希望这有帮助,与Swift玩得开心!