2014-06-04 3 views
14

В этом документе: 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; i < 3; ++i и i = 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 { 
+4

ли не различать передачи массива и передачи с переменным числом аргументов? Это два разных варианта использования. – Haspemulator

+0

Не в соответствии с документами, которые говорят: _Functions также может принимать переменное количество аргументов, собирая их в array._ прямо перед примером, используя '...' –

+1

. Часть «_collecting into into array_» означает те переменные аргументы доступны как массив, а не 'va_list'. – akashivskyy

ответ

35

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

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

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

выход:

5 
bar 
<NSView: 0x7fc5c1f0b450> 
+0

Вы можете узнать больше о параметрах Variadic (...) в документах - https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html –

5

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

Прекрасным примером будет этот пост.

Passing lists from one function to another in Swift

Смежные вопросы