我正在通过" Swift编程语言"和相关的游乐场文件。
我有一个部分,我被问到: 编写一个计算其参数平均值的函数。
鉴于上下文,这是我的解决方案
func averageOf(numbers: Int...) -> Int {
var sum = 0
var countOfNumbers = 0
for number in numbers {
sum += number
countOfNumbers += 1
}
var result: Double = Double(sum) / Double(countOfNumbers)
return result
}
averageOf()
averageOf(10, 20, 30)
正如你所看到的,我必须将结果称为Double(即sum / countOfNumbers)。
但是,在这种情况下我无法返回结果,因为我收到有关转换类型" Double"的返回表达式的错误。
然后我尝试返回Double(结果)但没有成功。
为什么这不起作用,我怎样才能最好地理解我在这里做错了什么?
答案 0 :(得分:3)
只是查看你的代码(而不是通过许多巧妙的方式给你另一个来计算):你的函数需要返回类型Int
,但是你返回Double
。
下面是带有注释更正的代码:
func averageOf(numbers: Int...) -> Double {
var sum = 0 // ^ note the return type here
var countOfNumbers = 0
for number in numbers {
sum += number
countOfNumbers += 1
}
/* Note here: you declare 'result' to be of type Double */
var result: Double = Double(sum) / Double(countOfNumbers)
return result /* and return 'result'; hence returning a Double */
}
averageOf(10, 20, 30) // 20.0 <-- a Double
答案 1 :(得分:1)
如果查看函数定义,则返回Int
(返回参数位于->
之后。
func averageOf(numbers: Int...) -> Int
如果您想要返回Double
或将结果转换为Double
,请将其更改为Int
答案 2 :(得分:1)
在Swift 3中......
使用variadic参数:
func averageOf(_ n: Int...) -> Double {
return Double(n.reduce(0, +)) / Double(n.count)
}
averageOf() // nan
averageOf(0) // 0
averageOf(1, 2, 3, 4) // 2.5
使用数组参数(guard
为空数组):
func averageOf(_ n: [Int]) -> Double {
guard n.count > 0 else { return 0 }
return Double(n.reduce(0, +)) / Double(n.count)
}
averageOf([Int]()) // 0
averageOf([1, 2, 3, 4]) // 2.5
答案 3 :(得分:0)
您的函数声明为返回Int:
func averageOf(numbers: Int...) -> Int {
您无法返回Double,因为它与此签名不匹配。您可以在返回之前转换回Int,或者更改函数签名。