Шпаргалка по Swift
Последнее обновление
Hello World и основы
На верхнем уровне Swift не требует шаблонного кода - запускается одна строка.
| Операция | Синтаксис |
|---|---|
| Вывести строку | print("Hello, World!") |
| Вывести без перевода строки | print("Hi", terminator: "") |
| Интерполяция строк | print("Hi \(name)") |
| Комментарий | // this is a comment |
| Многострочный комментарий | /* ... */ |
| Импортировать модуль | import Foundation |
| Запустить файл | swift run или swift main.swift |
Переменные (let / var) и типы
Используйте let для констант и var для изменяемых значений; типы обычно выводятся.
| Операция | Синтаксис |
|---|---|
| Константа | let age = 30 |
| Переменная | var count = 0 |
| Явный тип | let name: String = "Ada" |
| Базовые типы | Int, Double, String, Bool, Character |
| Преобразование типа | Double(i), String(n), Int("42") |
| Кортеж | let pair = (1, "a") |
| Псевдоним типа | typealias ID = Int |
| Проверить тип | value is String, value as? String |
Optional
Optional моделируют возможное отсутствие значения; извлекайте перед использованием.
| Операция | Синтаксис |
|---|---|
| Объявить optional | var name: String? = nil |
| Optional binding | if let n = name { ... } |
| Извлечение через guard | guard let n = name else { return } |
| Объединение с nil | let n = name ?? "default" |
| Цепочка optional | user?.address?.city |
| Принудительное извлечение (небезопасно) | name! |
| Неявно извлекаемый optional | var name: String! |
| Map по optional | name.map { $0.count } |
Строки
Строки - значимые типы с полной поддержкой Unicode.
| Операция | Синтаксис |
|---|---|
| Длина | s.count |
| Верхний / нижний регистр | s.uppercased(), s.lowercased() |
| Конкатенация | "foo" + "bar" |
| Интерполяция | "Total: \(price)" |
| Содержит | s.contains("ell") |
| Имеет префикс / суффикс | s.hasPrefix("he") |
| Разбить | s.split(separator: ",") |
| Заменить | s.replacingOccurrences(of: "a", with: "b") |
| Многострочная строка | """ ... """ |
Коллекции (Array, Dictionary, Set)
Три основных типа коллекций, все - значимые типы.
| Операция | Синтаксис |
|---|---|
| Литерал массива | var nums = [1, 2, 3] |
| Добавить | nums.append(4) |
| Доступ / количество | nums[0], nums.count |
| Map / filter | nums.map { $0 * 2 }, nums.filter { $0 > 1 } |
| Литерал словаря | var ages = ["Ada": 30] |
| Доступ к словарю | ages["Ada"] возвращает optional |
| Литерал множества | var ids: Set = [1, 2, 3] |
| Вставить в множество | ids.insert(4) |
| Перебор словаря | for (k, v) in ages { ... } |
Управление потоком
Условия не требуют скобок; switch должен быть исчерпывающим.
| Операция | Синтаксис |
|---|---|
| If / else | if x > 0 { ... } else { ... } |
| Тернарный оператор | let r = x > 0 ? "pos" : "neg" |
| Switch | switch n { case 1: ...; default: ... } |
| Switch с диапазоном | case 1...5: ... |
| Цикл for-in | for i in 0..<10 { ... } |
| For-in по массиву | for item in items { ... } |
| Цикл while | while x < 100 { ... } |
| Repeat-while | repeat { ... } while x < 100 |
| Break / continue | break, continue |
Функции и замыкания
У функций есть метки параметров; замыкания - самодостаточные блоки кода.
| Операция | Синтаксис |
|---|---|
| Определить функцию | func add(a: Int, b: Int) -> Int { a + b } |
| Внешняя метка | func greet(to name: String) { ... } |
| Параметр по умолчанию | func greet(name: String = "World") { ... } |
| Вариативный параметр | func sum(_ nums: Int...) -> Int { ... } |
| Несколько возвратов (кортеж) | func bounds() -> (min: Int, max: Int) { ... } |
| Выражение замыкания | let f = { (x: Int) -> Int in x * x } |
| Замыкание в конце вызова | nums.map { $0 * 2 } |
| Сокращённые аргументы | { $0 + $1 } |
Структуры против классов
Структуры - значимые типы (копируются); классы - ссылочные типы (общие).
| Операция | Синтаксис |
|---|---|
| Определить структуру | struct Point { var x: Int; var y: Int } |
| Определить класс | class Person { var name: String } |
| Инициализатор класса | init(name: String) { self.name = name } |
| Создать экземпляр | let p = Point(x: 1, y: 2) |
| Мутирующий метод структуры | mutating func move() { x += 1 } |
| Метод класса | func greet() { ... } |
| Наследование (только классы) | class Student: Person { ... } |
| Вычисляемое свойство | var area: Int { width * height } |
| Статический член | static let shared = Manager() |
Перечисления
Перечисления группируют связанные значения и могут нести ассоциированные данные.
| Операция | Синтаксис |
|---|---|
| Определить перечисление | enum Direction { case north, south } |
| Использовать вариант | let d = Direction.north |
| Switch по перечислению | switch d { case .north: ... } |
| Сырые значения | enum Status: Int { case ok = 200 } |
| Доступ к сырому значению | Status.ok.rawValue |
| Инициализация из сырого значения | Status(rawValue: 200) |
| Ассоциированные значения | case result(Int, String) |
| Методы у перечислений | func label() -> String { ... } |
Синтаксис Swift, который нужен чаще всего, на одной странице. Эта шпаргалка по Swift - быстрый справочник по ядру языка: константы и переменные, optional, строки, коллекции, управление потоком, функции и замыкания, а также структуры, классы и перечисления, на которых вы строите приложения для iOS и macOS.
Всё здесь - стандартный Swift, который компилируется официальным инструментарием. Копируйте нужное или попробуйте каждый фрагмент вживую в playground для Swift - без Xcode.
Часто задаваемые вопросы по шпаргалке Swift
Эта шпаргалка по Swift бесплатна?
Как извлечь optional в Swift?
nil, поэтому перед использованием его извлекают. Безопасные способы - optional binding (if let n = name { ... }), guard let в начале функции, оператор объединения с nil (name ?? "default") и цепочка optional (user?.name). Принудительное извлечение через name! работает, но приводит к падению, если значение nil, поэтому прибегайте к нему только когда уверены.В чём разница между структурой и классом в Swift?
struct - это значимый тип: при присваивании или передаче создаётся копия, поэтому изменения не затрагивают оригинал. class - это ссылочный тип: копии разделяют один экземпляр, и только классы поддерживают наследование. Рекомендация Apple - по умолчанию предпочитать структуры и использовать класс, когда нужно общее изменяемое состояние или наследование.