// 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 = total / numbers.count
找不到接受提供的参数的’/’的重载
我试图通过做修复:
average = Double(total/numbers.count)
但随后将getAverage设置为4而不是4.5
4
4.5
在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表示传递的第一个和第二个参数并将它们加起来。
reduce
combine
$0
$1
更简洁地说,您可以这样编写:numbers.reduce(0, +)。
numbers.reduce(0, +)
请注意,类型推断如何仍然可以很好地找出那total是一个Int。
total
Int