小编典典

找不到接受提供的参数的'/'的重载

swift

// Playground - noun: a place where people can play


func getAverage(numbers: Int...) -> Double{
    var total = 0
    var average:Double = 0

    for number in numbers{
        total = total + number
    }

    average = total / numbers.count

    return average
}

getAverage(3, 6)

我收到一个错误 average = total / numbers.count

找不到接受提供的参数的’/’的重载

我试图通过做修复:

average = Double(total/numbers.count)

但随后将getAverage设置为4而不是4.5


阅读 293

收藏
2020-07-07

共1个答案

小编典典

在Swift中没有这样的隐式转换,因此您必须自己明确地进行转换:

average = Double(total) / Double(numbers.count)

来自 Swift编程语言 :“永远不会将值隐式转换为其他类型。” (部分:快速浏览)

但是您现在使用的是Swift,而不是Objective-C,因此请尝试以更加面向功能的方式进行思考。您的函数可以这样写:

func getAverage(numbers: Int...) -> Double {
    let total = numbers.reduce(0, combine: {$0 + $1})
    return Double(total) / Double(numbers.count)
}

reduce将第一个参数作为累加器变量的初始值,然后将该combine函数应用于累加器变量和数组中的每个元素。在这里,我们传递一个匿名函数,该函数使用$0$1表示传递的第一个和第二个参数并将它们加起来。

更简洁地说,您可以这样编写:numbers.reduce(0, +)

请注意,类型推断如何仍然可以很好地找出那total是一个Int

2020-07-07