gpt4 book ai didi

swift - swift 中的“int ?' is not identical to ' Uint8”

转载 作者:可可西里 更新时间:2023-11-01 01:42:22 26 4
gpt4 key购买 nike

func add(numbers: Int...) -> Int?
{
var total:Int?
for i in numbers
{
total += i // >> 'int?' is not identical to 'Uint8' in swift

}
return total
}

numbers是Int,为什么total不能赋值给Int?

最佳答案

您得到的错误可能有点骗人。这里的根本问题是您声明了一个类型为 Int? 的变量 total,但实际上从未为其赋值。由于 total 没有被赋予一个整数值,因此尝试将它增加 i 是没有意义的。

您可以通过将 total 变量初始化为零来解决这个问题。还值得注意的是,您的总计和返回类型在这里不需要是可选的,因为您将可变数量的非可选 Int 作为输入,这意味着您的输入在加在一起时总是有总计。

如果您执意要在此处保留可选项,则以下代码将起作用。

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, +)
}

关于swift - swift 中的“int ?' is not identical to ' Uint8”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28526194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com