计算参数的平均值

Calculating the Average of Arguments

我正在研究 "The Swift Programming Language" 和相关的 playground 文件。

我有一个部分被问到: 编写一个计算其参数平均值的函数。

鉴于上下文,这是我的解决方案

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(即总和/countOfNumbers)。

但是,在这种情况下我无法 return 结果,因为我在转换 return 类型 "Double" 表达式时遇到错误。

然后我尝试 return Double(result) 但没有成功。

为什么这不起作用,我怎样才能最好地理解我在这里做错了什么?

只看你的代码(并没有给你另一个,从许多巧妙的方法中,计算这个):你的函数需要 return 类型 Int,但是你 return 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

您的函数声明为 returnInt:

func averageOf(numbers: Int...) -> <i><b>Int</b></i> {

您不能 return Double,因为它与此签名不匹配。您可以在 returning 之前转换回 Int,或者更改函数签名。

如果你看一下你的函数定义,它是return一个Int(return参数在->之后。

func averageOf(numbers: Int...) -> Int

如果您想 return Double 或在 returning[=16= 之前将结果转换为 Int,请将其更改为 Double ]

在Swift 3...

使用可变参数:

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