Перейти к основному содержимому

5.14. Ключевые слова в Swift

Разработчику Архитектору

Ключевые слова в Swift

Объявление сущностей и типов

Ключевое словоЗначениеПример
classОбъявление классаclass User { var name: String }
structОбъявление структурыstruct Point { var x: Int; var y: Int }
enumОбъявление перечисленияenum Direction { case north, south }
protocolОбъявление протоколаprotocol Drawable { func draw() }
extensionРасширение существующего типаextension String { func trimmed() -> String { self.trimmingCharacters(in: .whitespaces) } }
funcОбъявление функцииfunc greet() { print("Hello") }
initОбъявление инициализатораinit(name: String) { self.name = name }
deinitОбъявление деинициализатораdeinit { print("Object removed") }
subscriptОбъявление индексатораsubscript(index: Int) -> Element { get { return storage[index] } }
typealiasСоздание псевдонима типаtypealias UserID = String
associatedtypeОбъявление ассоциированного типа в протоколеprotocol Container { associatedtype Item; func add(_ item: Item) }
importИмпорт модуля или символаimport Foundation

Объявление переменных и констант

Ключевое словоЗначениеПример
letОбъявление константыlet pi = 3.14159
varОбъявление переменнойvar counter = 0
inoutУказание параметра для изменения исходного значенияfunc increment(_ number: inout Int) { number += 1 }

Управление потоком выполнения

Ключевое словоЗначениеПример
ifУсловное ветвлениеif age >= 18 { print("Adult") }
elseАльтернативная ветка условияif isLoggedIn { showProfile() } else { showLogin() }
switchМножественный выбор на основе значенияswitch statusCode { case 200: print("OK"); default: print("Error") }
caseВариант в операторе switch или enumcase .success(let data): process(data)
defaultОбработка всех остальных случаев в switchdefault: print("Unknown status")
forЦикл по последовательностиfor i in 0..<5 { print(i) }
inОператор принадлежности в цикле или паттернеfor item in collection { }
whileЦикл с предусловиемwhile !queue.isEmpty { process(queue.dequeue()) }
repeatЦикл с постусловием (в паре с while)repeat { fetch() } while hasMoreData
guardРанний выход при невыполнении условияguard let user = currentUser else { return }
returnВозврат значения из функции или выход из неёreturn result * 2
breakПрерывание цикла или ветки switchif shouldStop { break }
continueПереход к следующей итерации циклаif item.isEmpty { continue }
fallthroughПродолжение выполнения в следующую ветку switchcase .warning: print("Warning"); fallthrough
deferОтложенное выполнение блока при выходе из области видимостиdefer { file.close() }
doНачало блока для обработки ошибокdo { try performOperation() } catch { handleError() }
catchОбработка ошибки в блоке docatch NetworkError.timeout { retry() }

Типы и преобразования

Ключевое словоЗначениеПример
asПриведение типаlet view = element as UIView
as?Условное приведение типа (возвращает опционал)if let button = view as? UIButton { }
as!Принудительное приведение типаlet label = view as! UILabel
isПроверка принадлежности к типуif item is String { }
AnyПредставление любого типаfunc log(_ value: Any) { print(value) }
AnyObjectПредставление любого объектного типаlet objects: [AnyObject] = [user, account]

Обработка ошибок

Ключевое словоЗначениеПример
throwГенерация ошибкиthrow NetworkError.connectionFailed
throwsУказание, что функция может генерировать ошибкиfunc fetchData() throws -> Data { }
rethrowsУказание, что функция генерирует ошибки только если генерирует переданный замыканиеfunc map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
tryВызов функции, которая может генерировать ошибкиlet data = try loadData()
try?Преобразование вызова с ошибкой в опциональный результатlet result = try? dangerousOperation()
try!Принудительное игнорирование возможной ошибкиlet config = try! loadConfig()

Асинхронное программирование

Ключевое словоЗначениеПример
asyncУказание асинхронной функцииfunc fetchData() async -> Data { }
awaitОжидание завершения асинхронной операцииlet data = await fetchData()

Самоссылки и наследование

Ключевое словоЗначениеПример
selfСсылка на текущий экземплярself.name = name
SelfСсылка на текущий типprotocol Copyable { func copy() -> Self }
superДоступ к реализации суперклассаsuper.viewDidLoad()
overrideПереопределение метода или свойства суперклассаoverride func viewDidLoad() { }
finalЗапрет наследования класса или переопределения членаfinal class Utility { }

Модификаторы доступа

Ключевое словоЗначениеПример
privateДоступ только внутри текущего объявленияprivate var secretKey: String
fileprivateДоступ только внутри текущего файлаfileprivate func helper() { }
internalДоступ внутри модуля (значение по умолчанию)internal class APIManager { }
publicДоступ из любого модуляpublic struct User { }
openДоступ из любого модуля с возможностью наследования и переопределенияopen class ViewController { }