Функция в Swift может возвращать некоторое значение или результат. В прошлой теме были определены функции, которые ничего не возвращают:
func printHello(){ print("Hello world")}
Такая функция ничего не возвращает, возвращаемый тип не указан. Хотя фактически она будет эквивалентна следующей функции:
func printHello() -> Void { print("Hello world")} func printHello() -> () { print("Hello world")}
Тип Void указывает, что функция фактически ничего не возвращает.
Теперь напишем функцию, которая бы возвращала какое-либо значение:
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
нет смысла ставить какие-либо еще
инструкции.
Поскольку функция возвращает некоторое значение, то мы можем присвоить это значение какой-либо переменной / константе и затем использовать в программе. Единственное, надо учитывать, что тип возвращаемого значения функции должен совпадать с типом переменной / константы:
func sum (_ x: Int, _ y: Int) -> Int{ return x + y } let a = sum(4,5) let b = sum(10, 23)
Функция может возвращать сразу несколько значений в виде более сложного по структуре значения, например, в виде кортежа, который может содержать различные значения.
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)")
Функции могут возвращать значения опциональных типов, то есть таких типов которые могут иметь значение, а могут и не иметь. Их применение может быть полезно, если при каких-то условиях функция не должна возвращать значения.
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:
if let tax = measureTax(110){ // nil print(tax) }