Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СЕССИЯ ОТВЕТЫ / iOS сессия ответы.docx
Скачиваний:
21
Добавлен:
25.12.2020
Размер:
14.45 Mб
Скачать

25.Входные аргументы и возвращаемое значение

Функция может принимать аргументы (параметры) в качестве входных значений и возвращать результат своей работы (возвращаемое значение). И для входных, и для возвращаемого значений должны быть определены типы данных. Рассмотрим пример. Требуется многократно производить сложение двух целочисленных чисел и возвращать полученный результат в виде значения типа Int. Правильным подходом будет объявление функции, производящее данные действия. В качестве входного аргумента будут служить складываемые числа, а результат операции будет возвращаемым значением. Конечно, это очень простой пример, и куда лучше написать a+b для сложения двух операндов, а не городить функцию. Но для рассмотрения учебного материала он подходит как нельзя лучше. Но если вычисляемое выражение значительно сложнее, например a+b*b+a*(a+b)*(a+b), то создание функции будет оправданно.

Входные аргументы

Реализуем описанную выше задачу, но при этом исключим из неетребование возвращать результат сложения. Пусть результат операции выводится на отладочную консоль (листинг 15.2).

Листинг 15.2

funcsumTwoInt(a: Int, b: Int){

print("Результат операции - \(a+b)")

}

sumTwoInt(a: 10, b: 12)

Глава 15 • Функции 245

Консоль

Результат операции - 22

Функция sumTwoInt(a:b:) имеет два входных параметра типа Int — a и b. Обратите внимание, что все входные аргументы должны иметь значения, поэтому попытка вызвать функцию, передав в нее лишь один

Изменяемые копии входных аргументов

Все входные параметры функции — константы. При попытке изменения их значения внутри тела функции происходит ошибка. При необходимости изменения переданного входного значения внутри функции потребуется создать новую переменную и присвоить переданное значение ей (листинг 15.6).

Листинг 15.6

funcreturnMessage(code: Int, message: String) -> String {

varmutableMessage = message

mutableMessage += String(code)

return mutableMessage

}

varmyMessage = returnMessage(code: 200, message: "Кодсообщения - ")

ФункцияreturnMessage(code:message:) получаетнавходдвааргумента: code и message. В ее теле создается изменяемая копия message, которая без каких-либо ошибок модифицируется, после чего возвращается.

Сквозные параметры

Приведенный способ модификации значений аргументов позволяет получать доступ к изменяемому значению только в пределах тела самой функции. Для того чтобы была возможность модификации входных аргументов с сохранением измененных значений после окончания работы функции, необходимо использовать сквозные параметры. Чтобы преобразовать входной параметр в сквозной, перед описанием его типа необходимо указать модификатор inout. Сквозной параметр передается в функцию, изменяется в ней и сохраняет свое значение при завершении работы функции, заменяя собой исходное значение. При вызове функции перед передаваемым значением аргумента необходимо ставить символ амперсанд (&) , указывающий на то, что параметр передается по ссылке.

Функция в листинге 15.7 обеспечивает обмен значениями двух внешних параметров.

Листинг 15.7

funcchangeValues(_ a: inoutInt, _ b: inoutInt) -> () {

let tmp = a

a = b

b = tmp

}

var x = 150, y = 45

changeValues(&x, &y)

x // 45

y // 150

Функция принимает на входе две переменные, a и b. Эти переменные

передаются в функцию как сквозные параметры, что позволяет изменить их значения внутри функции и сохранить эти изменения после завершения ее работы.

ПРИМЕЧАНИЕ В качестве сквозного параметра может выступать только переменная. Константы или литералы нельзя передавать, так как они являются неизменяемыми.

Соседние файлы в папке СЕССИЯ ОТВЕТЫ