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 или enum | case .success(let data): process(data) |
default | Обработка всех остальных случаев в switch | default: 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 | Прерывание цикла или ветки switch | if shouldStop { break } |
continue | Переход к следующей итерации цикла | if item.isEmpty { continue } |
fallthrough | Продолжение выполнения в следующую ветку switch | case .warning: print("Warning"); fallthrough |
defer | Отложенное выполнение блока при выходе из области видимости | defer { file.close() } |
do | Начало блока для обработки ошибок | do { try performOperation() } catch { handleError() } |
catch | Обработка ошибки в блоке do | catch 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 { } |