Функция, принимающая переменное число аргументов
В этом документе: 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