Дополнительно о параметрах функций
С помощью оператора многоточия (...) можно устанавливать произвольное количество параметров одного типа.
1
2
3
4
5
6
7
8
9
10
11
func sum(_ numbers: Int...) -> Int{
var total: Int = 0
for number in numbers{
total+=number
}
return total
}
sum(1, 2, 3, 4, 5) // 15
Если параметр именнованный, то указывается его имя, после которого после двоеточия указываются через запятую все значения:
1
2
3
4
5
6
7
8
9
10
11
func sum(numbers: Int...) -> Int{
var total: Int = 0
for number in numbers{
total+=number
}
return total
}
sum(numbers: 1, 2, 3, 4, 5) // 15
Выходные параметры inout
По умолчанию все параметры функции представляют константные значения, и мы не можем их изменить. Например, при определении следующей функции мы получим ошибку:
1
2
3
func increase(_ n : Int){
n += 10
}
По умолчанию параметр n представляет константу, и его значение мы не можем изменить. Однако в ряде задач такое поведение может потребоваться. И если все таки необходимо изменить значение параметра, то его надо определить с ключевым словом inout:
1
2
3
4
5
6
7
func increase(_ n : inout Int){
n += 10
}
var d = 20
increase(&d)
print(d) // 30
При передачи переменных в функцию к ним добавляется знак амперсанда.То есть фактически мы передаем ссылку на переменную, а не просто ее значение. И, таким образом, сможем изменить значение переменной, определенной вне функции.
Другой показательный пример - обмен значений переменных:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func swap(a: inout Int, b: inout Int){
let temp = a
a = b
b = temp
}
var num1 = 10
var num2 = 13
swap(&num1, &num2)
print(num1) // 13
print(num2) // 10