- •Объявление, инициализация и изменение значения. Виды операторов. Переменные и константы. Виды объектов.
- •Типы данных
- •4. Числовые типы данных. Арифметические операторы. Приведение числовых типов данных.
- •5. Текстовые типы данных. Инициализация строковых значений. Приведение к строковому типу данных. Объединение строк.
- •6. Логические значения. Логические операторы.
- •Как проверить, есть ли значение в переменной с опциональным типом данных?
- •12* Операторветвления switch. Fallthrough. Where.
- •13.Сұрақ. Кортежи в операторе switch
- •Наборы: объявление набора, создание пустого набора, доступ к набору и модификация набора.
- •Оператор while
- •Оператор repeatwhile
- •24 Функции: объявление, синтаксис вызова функции. Примеры.
- •Заметка
- •25.Входные аргументы и возвращаемое значение
- •Глава 15 • Функции 245
- •26 Функция в качестве входного аргумента
- •27.Кортеж в качестве возвращаемого значения
- •28. Функционалдымүмкіндіктер. Функционалдытүрі. Функция аргумент ретінде.
- •29. Күрделіфункционалды тип. Қайтарумәніретінде функция
- •30. Кірістірілгенфункциялар. Функциянышамадантысжүктеу.
- •31. Рекурсивный вызов функций. Безымянные функции.
- •32.Замыкания. Функция как замыкания
- •33. Замыкание.Замыкающие выражение
- •Неявные возвраты из замыканий с одним выражением
- •Сокращенные имена аргументов
- •Создание нового отсортированного массива#
- •Сортировка существующего массива на месте#
- •Сортировка массива с пользовательским заказом#
- •38.Объектно-ориентированное программирование в Swift. Экземпляры
- •43. Собственны еинициализаторы
- •44. Методы в структурах
- •45.Сыныптар құрылымдарға өте ұқсас, бірақ олар бірнеше маңызды нүктелермен ерекшеленеді.
- •Переопределение свойств
- •52.Псевдоним Any.Приведение типа Any.Псевдоним AnyObject
- •53.Инициализаторы
- •54.Деинициализаторы
- •Создание Auto Layout и его составляющих
- •. Понятие Segues. Виды Segues.
- •59. Создание программируемых переходов. (ProgrammaticSeguesiniOs)
- •60 .Передачаданныхмеждуконтроллерами. (Passing Data Between Controllers)
- •Отображение данных в мобильном приложении ввиде списка. Работа с таблицами в iOs (Working With Tables)
- •Понятие делегата и протокола на примере работы с таблицами. Назначение и принцип работы. (Table delegates and protocols)
- •Опциональные протоколы
- •Использование протоколов
- •Делегаты
- •Создание и отображение данных в ячейках (Creating custom table cell)
- •Принципы работы с Core Data (Working With Core Data, Saving to Core Data, Fetching data from Core Data, Deleting items from Core Data)
- •Понятие и назначение rest & crud (Understanding rest & crud)
- •67.Асинхронды
- •68. Создание post запросов (Making post requests)
- •Размеры и другие детали внешнего исполнения[править | править код]
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. Эти переменные
передаются в функцию как сквозные параметры, что позволяет изменить их значения внутри функции и сохранить эти изменения после завершения ее работы.
ПРИМЕЧАНИЕ В качестве сквозного параметра может выступать только переменная. Константы или литералы нельзя передавать, так как они являются неизменяемыми.