Дополнительно о параметрах функций


С помощью оператора многоточия (...) можно устанавливать произвольное количество параметров одного типа.

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