Руководство Swift Function
View more Tutorials:
Для начала, чтобы выполнить вам нужно создать project. Открыть XCode и создать новый Project:





В Swift, функция определяется ключевым словом "func", функция имеет определенное название, функция может имет 0 или более параметров, или не имеет вид возврата.
Синтаксис определяющий функцию:
// Функция имеет вид возврата // func functionName(parameters) -> returntype { // Statements.... return value; } // Функция не имеет вид возврата func functionName(parameters) { // Statements... }
Это функция с названием sayHello, имеет параметр вида String, и возвращает String.
MyFirstFunction.swift
import Foundation // Определить функцию (function) // Название функции: sayHello // Параметр: name, вид String // Возвращает (return): String func sayHello(name:String) -> String { // Если 'name' пустой (empty). if name.isEmpty { // Вернуть, и завершить функцию. return "Hello every body!" } // Если 'name' не пустой, данный код будет выполнен. return "Hello " + name } // Определить функцию, не имеющую параметр, не имеющую вида возврата. func test_sayHello() { // Вызвать функцию sayHello, передать в пустой String. var greeting1 = sayHello("") print("greeting1 = " + greeting1); // Вызвать функцию sayHello, передать значение параметру как "Swift". var greeting2 = sayHello("Swift") print("greeting2 = " + greeting2); }
Изменить исходный файл main.swift чтобы протестировать функцию, только что созданную вами.
main.swift
import Foundation // Вызвать функцию test_sayHello() test_sayHello()
Запуск примера:

Swift 2.1 дает правило вызова функции, далее указаны правила:
- Первый параметр переданный функции (или методу) не требует метку (Label) для аргумента
- Другие параметры переданные функции (или методу) требуют метку аргумента.
- Все параметры переданные в Constructor требуют метку (Label) для аргумента.
RulesCallFunc.swift
import Foundation // name1, name2 являются марками (Label). func sayHello(name1: String, name2: String) { print("Hello " + name1); print("Hello " + name2); } func test_sayHello() { let tom = "Tom" let jerry = "Jerry" // Правило вызова функции (Или метода): // Первый параметр не требует марки (Label) // Другие параметры требуют наличие марки. sayHello(tom, name2: jerry) }
Команда return в параметре останавливает выполнение функции и возвращает значения из этой функции.
FunctionExample1.swift
import Foundation // Определить функцию для суммирования 3 чисел Int, возвращает вид Int. func sum(a: Int, b: Int, c: Int) -> Int { // Объявить переменную вида Int. var ret:Int = a + b + c return ret } // Определить функцию для поиска наибольшего числа среди 3 чисел. func max(a: Int, b: Int, c: Int) -> Int { // Объявить переменную 'm', прикрепить к ней значение 0. var m = a // Проверить если m < b то прикрепить m = b. if m < b { m = b } // Если m > c то вернуть (return) m. if m > c { // Завершить функцию return m; } return c }
В Swift функция может возвращать много значений, на самом деле, эта функция возвращает Tuple (Кортежи), Tuple это ряд значений поставленных в ( ), и отделяются запятой. Каждое значение имеет название чтобы иметь доступ.
ReturningTupleExample.swift
import Foundation // Определить функцию с названием getMinMax // Вход является массивом чисел Int. // Данная функция возвращает 2 значения: // Наибольшее и наименьшее число в массиве. func getMinMax(arr: [Int]) -> (min: Int, max: Int) { // Если массив не имеет элементов, то возвращает (0,0). if arr.count == 0 { // Завершить функцию. return (0, 0) } // Объявить 2 переменные 'mi', 'ma' // Прикрепить значение первого элемента в массиве для них. var mi: Int = arr[0] var ma: Int = arr[0] for a in arr { if mi > a { mi = a } if ma < a { ma = a } } return (mi, ma) } // Тест функции getMinMax. func test_returningTupleExample() { // Массив чисел Int. var years: [Int] = [2000, 1989, 1975, 2005, 2016] // Вызвать функцию getMinMax. var y = getMinMax(years) print("Max = \(y.max)") print("Min = \(y.min)") }
Поменять исходный файл main.swift чтобы протестировать пример:
main.swift
import Foundation test_returningTupleExample()
Запуск примера:

Swift использует "variableName: DataType..." чтобы отметить один параметр Variadic. Смотрите пример ниже про функцию с параметром Variadic и как использовать эту функцию.
VariadicParamsFunction.swift
import Foundation // Функция с параметрами Variadic: nums // Параметр nums: Похожий на массив чисел Int. func sum(nums: Int...) -> Int { var retNumber : Int = 0 for n in nums { retNumber = retNumber + n } return retNumber } // Использовать функцию, с параметром Variadic: func test_sum() { // Вызвать функцию sum, передать 3 параметра. var sum1 = sum(1, 2, 3) print("sum(1, 2, 3) = \(sum1)") // Вызвать функцию sum, передать 4 параметра. var sum2 = sum(1,4, 5, 7) print("sum(1,4, 5, 7) = \(sum2)") }
Запуск пример:

Swift позволяет вам написать функцию внутри другой функции, данная функция используется в родительской функции.
NestedFunction.swift
import Foundation // Функция возвращает налог, основываясь на коде страны и заработной плате. func getTaxAmount(countryCode:String, salaryAmount:Int) -> Int { // Функция считает налог в Америке. func getUsaTaxAmount( salaryAmount: Int) -> Int { // 15% return 15*salaryAmount/100 } // Функция считает налог во Вьетнаме. func getVietnamTaxAmount( salaryAmount:Int) -> Int { // 10% return 10 * salaryAmount/100 } if countryCode == "US" { return getUsaTaxAmount(salaryAmount) } else if countryCode == "VN" { return getVietnamTaxAmount(salaryAmount) } // Другие страны (5%) return 5 * salaryAmount / 100 }
В Swift каждая функция имеет вид функции, посмотрим на следующую функцию:
func sum(a: Int, b: Int) -> Int { return a + b; }
Вид функции:
(Int,Int) -> (Int)
ReturningFunction.swift
import Foundation // Функция считает налог в Америке. // Вид функции: (Int) -> (Int) func getUsaTaxAmount(salary: Int) -> Int { return 15 * salary / 100 } // Функция считает налог во Вьетнаме. // Вид функции: (Int) -> (Int) func getVietnamTaxAmount(salary: Int) -> Int { return 10 * salary / 100 } // Функция считает налог по умолчанию. // Вид функции: (Int) -> (Int) func getDefaultTaxAmount(salary: Int) -> Int { return 5 * salary / 100 } // Данная функция возвращает функцию func getTaxFunction(countryCode: String) -> ( Int -> Int ) { if countryCode == "US" { return getUsaTaxAmount } else if countryCode == "VN" { return getVietnamTaxAmount } return getDefaultTaxAmount } // Test func test_returningFunction() { var countryCode = "US" print("Country Code = " + countryCode) // Get function. var taxFunction = getTaxFunction(countryCode) var salary = 10000 print("Salary = \(salary)") var taxAmount = taxFunction(salary) print("Tax Amount = \(taxAmount)") }
Изменить main.swift для теста примера:
main.swift
import Foundation test_returningFunction()
Запуск примера:
