Возвращение функцией значения


Функция в Swift может возвращать некоторое значение или результат. В прошлой теме были определены функции, которые ничего не возвращают:

1
func printHello(){ print("Hello world")}
Такая функция ничего не возвращает, возвращаемый тип не указан. Хотя фактически она будет эквивалентна следующей функции:

1
2
func printHello() -> Void { print("Hello world")}
func printHello() -> () { print("Hello world")}
Тип Void указывает, что функция фактически ничего не возвращает.

Теперь напишем функцию, которая бы возвращала какое-либо значение:

1
2
3
4
5
6
func sum (_ x: Int, _ y: Int) -> Int{
return x + y
}

print(sum(4,5)) // 9
print(sum(5,6)) // 11
Итак, здесь определена функция sum, которая возвращает сумму двух чисел. В качестве возвращаемого типа указан тип Int.

Если функция возвращает какое-либо значение, отличное от Void, то в теле функции нам надо использовать оператор return. После этого оператора ставится возвращаемое значение.

В данном случае мы возвращаем значение Int, значит, после return обязательно должно располагаться значение типа Int или выражение, которое возвращает объект Int. Важно также понимать, что после вызова оператора return работа функции завершается, поэтому после выражения return нет смысла ставить какие-либо еще инструкции.

Поскольку функция возвращает некоторое значение, то мы можем присвоить это значение какой-либо переменной / константе и затем использовать в программе. Единственное, надо учитывать, что тип возвращаемого значения функции должен совпадать с типом переменной / константы:

1
2
3
4
5
func sum (_ x: Int, _ y: Int) -> Int{
return x + y
}
let a = sum(4,5)
let b = sum(10, 23)
Возвращение нескольких значений
Функция может возвращать сразу несколько значений в виде более сложного по структуре значения, например, в виде кортежа, который может содержать различные значения.

1
2
3
4
5
6
7
8
9
10
11
func getInfo(_ salary: Double) -> (tax: Double, rent: Double){

let tax = salary * 0.13
let rent = salary * 0.05
return (tax, rent)
}

var losses = getInfo(11000)

print("Подоходный налог: \(losses.tax)")
print("Рента: \(losses.rent)")
Опциональное возвращаемое значение
Функции могут возвращать значения опциональных типов, то есть таких типов которые могут иметь значение, а могут и не иметь. Их применение может быть полезно, если при каких-то условиях функция не должна возвращать значения.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func measureTax(_ salary: Double) -> Double?{

if(salary > 1000){

return salary * 0.13
}
return nil
}

if let tax = measureTax(11000){ // 1430

print(tax)
}

if let tax = measureTax(110){ // nil

print(tax)
}
Здесь функция measureTax(), предназначенная для вычисления налогов с дохода, возвращает значение nil, если доход меньше 1000. Иначе возвращает 13 % от дохода. Оба случая описываются типом Double?.

Чтобы понять, а возвращает ли функция какое-либо значение, мы можем использовать конструкцию if:

1
2
3
4
if let tax = measureTax(110){ // nil

print(tax)
}