Функция, принимающая переменное число аргументов

В этом документе: 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..3 и 0...3 для замены i = 0; я < 3; ++i i = 0; я < 3; ++i i = 0; я < 3; ++i и i = 0; я <= 3; ++i i = 0; я <= 3; ++i i = 0; я <= 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 {

Ответы

Ответ 1

В случае всех аргументов число Int: Int [] было бы интуитивным. Но если у вас есть такой код:

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

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

вывод:

5
bar
<NSView: 0x7fc5c1f0b450>

Ответ 2

Тип параметра sumOf известен как параметр "variadic". Прошедшие параметры принимаются как группа элементов и затем преобразуются в массив, прежде чем использовать его в этой функции.

Отличным примером может служить этот пост.

Передача списков из одной функции в другую в Swift