可变参数v数组参数

7 parameters ios swift

我正在努力查看将值传递给函数时使用哪种方法是否有明显的优势。下面的代码可能不是解释我要做出的决定的最佳示例,但我认为这是最容易理解的示例。

可变参数方法

func arithmeticMean(numbers: Double...) -> Double {
   var total: Double = 0
   for value in numbers {
      total += value
   }

   return total / Double(numbers.count)
}

arithmeticMean(5, 10, 15)
Run Code Online (Sandbox Code Playgroud)

数组参数法

func arithmeticMean(numbers: [Double]) -> Double {
   var total: Double = 0
   for value in numbers {
       total += value
   }

   return total / Double(numbers.count)
}

arithmeticMean([5, 10, 15])
Run Code Online (Sandbox Code Playgroud)

两种技术中的哪一种是首选?如果是这样,为什么(速度,可靠性或只是易于阅读)?谢谢。

Leo*_*Leo 8

我认为没有速度差异。因为在功能内,您使用的方式Variadic Parameter与相同Array

  1. 我认为如果参数数量较少(例如小于5个),Variadic Parameter则因为易于阅读,可能是一个更好的解决方案。

  2. 如果参数数量大。数组是更好的解决方案。

也知道,Variadic Parameter有一些限制:

一个函数最多可以有一个可变参数,并且必须始终出现在参数列表的最后,以避免在调用带有多个参数的函数时产生歧义。

如果您的函数具有一个或多个具有默认值的参数,并且还具有可变参数,则将可变参数放在所有默认参数之后,并位于列表的末尾。

仅出于我的想法。希望有所帮助

  • 请注意,它有一个缺点,即一个函数最多只能有一个可变参数。 (4认同)
  • 从 Swift 5.4 开始,这不再是一个限制。Swift 5.4 在函数中引入了多个可变参数。SE-0284 (4认同)
  • 请取消限制。现在在 swift 5.4 中,我们可以拥有任意数量的可变参数。 (2认同)