'诠释?在swift中与'Uint8'不同

时间:2015-02-15 12:49:11

标签: swift

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?

3 个答案:

答案 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)

总计不是IntOptional(Int),您需要打开才能成为Int

您可以通过两种方式实现这一目标,更快,更安全:

更快:return total!

更安全的:

if let total = total {return total}

希望这有帮助,与Swift玩得开心!