gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:02:24 25 4
gpt4 key购买 nike

// 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 上遇到错误

Could not find an overload for '/' that accepts the supplied arguments

我尝试通过以下方式修复:

average = Double(total/numbers.count)

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

最佳答案

Swift 中没有这样的隐式转换,所以你必须自己显式转换:

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

来自 The Swift Programming Language :“值永远不会隐式转换为另一种类型。” (部分: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

关于swift - 找不到接受提供的参数的 '/' 的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004858/

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