【问题标题】:Function taking a variable number of arguments采用可变数量参数的函数
【发布时间】:2014-06-04 11:09:28
【问题描述】:

在本文档中:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-XID_1

它提到在创建for循环时,我们可以使用0..30...3的简写分别替换i = 0; i < 3; ++ii = 0; i <= 3; ++i

一切都很好。

在“函数和闭包”部分的文档中进一步说,函数可以通过数组传递可变数量的参数。

但是,在代码示例中,我们又看到了...

func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
} 

这是一个错误吗?在我看来,更直观的语法是numbers: Int[]

下面的几个示例我们看到另一个代码示例,它具有以下内容:

func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {

【问题讨论】:

  • 你不区分传递数组和传递可变参数吗?这是 2 个不同的用例。
  • 不是按照文档说的:函数也可以接受可变数量的参数,将它们收集到一个数组中。就在使用...的示例之前
  • 将它们收集到数组中”部分意味着这些变量参数可以作为数组访问,而不是va_list
  • 哦,我明白了!谢谢大家。不知道为什么这个问题被标记了。感谢您的回答。

标签: swift


【解决方案1】:

如果所有参数都是 Int 数字: Int[] 会很直观。但是如果你有这样的代码:

func foo(args:AnyObject...) {
    for arg: AnyObject in args {
        println(arg)
    }
}

foo(5, "bar", NSView())

输出:

5
bar
<NSView: 0x7fc5c1f0b450>

【讨论】:

【解决方案2】:

sumOf 中的参数类型称为“可变参数”。 传递的参数仅作为一组元素被接受,然后在该函数中使用之前转换为数组。

这篇文章就是一个很好的例子。

Passing lists from one function to another in Swift

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2011-01-09
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多