Перейти к содержанию
Innovialabs

Основы Swift: синтаксис, опционалы и структуры

Основы4 мин

Коротко

В Swift сначала стоит освоить пять вещей: let/var, опционалы с безопасной распаковкой, разницу между struct (значение) и class (ссылка), enum и замыкания — на них держится почти весь код под iOS.

Что нужно знать в первую очередь

Swift — язык Apple для iOS, macOS, watchOS и серверной разработки. Он строго типизирован, но тип чаще всего выводится сам. Новичок почти сразу сталкивается с пятью темами: константы и переменные, опционалы, структуры и классы, перечисления и замыкания. Разберём каждую на коротких примерах — их можно запустить в Xcode Playground или на swift.org.

let и var

  • let — константа, значение нельзя изменить после присваивания.
  • var — переменная.
let name = "Aziz"        // тип String выведен автоматически
var score = 10
score += 5               // можно
// name = "Bobur"        // ошибка компиляции
let price: Double = 9.5  // тип можно указать явно

Правило: по умолчанию пишите let, а var — только когда значение действительно меняется. Компилятор сам подскажет, если var не нужен.

Опционалы и распаковка

Опционал (String?, Int?) означает: «здесь может быть значение, а может быть nil». Обычная переменная String никогда не бывает nil — это защищает от целого класса ошибок.

let input = "42"
let number: Int? = Int(input)   // строка может не быть числом

// 1. if let — распаковать, если значение есть
if let n = number {
    print("Число: \(n)")
}

// 2. guard let — выйти раньше, если значения нет
func double(_ value: Int?) -> Int {
    guard let v = value else { return 0 }
    return v * 2
}

// 3. ?? — значение по умолчанию
let safe = number ?? 0

// 4. ?. — опциональная цепочка
let length = Int("abc")?.description.count  // nil

Есть и принудительная распаковка number!. Если внутри nil, приложение упадёт. Используйте её только когда значение гарантировано, а лучше — не используйте вовсе.

Структуры и классы

Главное различие — struct передаётся по значению, class — по ссылке.

struct Point { var x: Int; var y: Int }
class Counter { var value = 0 }

var a = Point(x: 1, y: 2)
var b = a          // копия
b.x = 100          // a.x всё ещё 1

let c1 = Counter()
let c2 = c1        // та же ссылка
c2.value = 5       // c1.value тоже 5
structclass
Передачакопия значенияссылка на объект
Наследованиенетесть
Автоматический инициализаторда (memberwise)нет
Изменение в методенужен mutatingсвободно

Практика Swift: начинайте со struct, а class берите, когда нужна общая изменяемая сущность, наследование или совместимость с Objective-C API.

Перечисления

enum в Swift — не просто набор констант. Варианты могут хранить связанные значения, а switch обязан покрыть все случаи.

enum PaymentStatus {
    case pending
    case paid(amount: Double)
    case failed(reason: String)
}

let status = PaymentStatus.paid(amount: 250)

switch status {
case .pending:            print("Ожидает")
case .paid(let amount):   print("Оплачено: \(amount)")
case .failed(let reason): print("Ошибка: \(reason)")
}

Если вы добавите новый вариант, компилятор покажет все switch, которые нужно обновить.

Замыкания

Замыкание — функция без имени, которую можно передать как значение. Их постоянно используют для сортировки, фильтрации и колбэков.

let prices = [120, 45, 80]

let sorted = prices.sorted { $0 < $1 }        // [45, 80, 120]
let expensive = prices.filter { $0 > 50 }     // [120, 80]
let labels = prices.map { "\($0) сум" }

func load(completion: (String) -> Void) {
    completion("готово")
}
load { result in print(result) }

$0, $1 — короткие имена аргументов. Синтаксис с замыканием после скобок называется trailing closure.

Частые ошибки новичков

  • Повсюду ставить ! вместо if let / guard let.
  • Делать всё классами по привычке из других языков.
  • Использовать var, когда хватает let.
  • Писать default в switch по enum и терять подсказки компилятора о новых вариантах.

Официальное руководство по языку — The Swift Programming Language.

Частые вопросы

Для разработки под iOS — да, нужен Xcode, а он работает только на macOS. Сам язык можно изучать и на Linux или Windows, установив Swift с официального сайта.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.