Код IT Загрузка примера кода…

Plain text main.swift
enum ValidationError: Error { case empty }

let rawNickname: String? = "  tim  "

if let nick = rawNickname?.trimmingCharacters(in: .whitespacesAndNewlines), !nick.isEmpty {
    print("Привет, \(nick)")
}

func requireNickname(_ value: String?) throws -> String {
    guard let nick = value?.trimmingCharacters(in: .whitespacesAndNewlines), !nick.isEmpty else {
        throw ValidationError.empty
    }
    return nick
}

Разбор:
- `if let` с несколькими условиями через запятую: распаковка optional и проверка, что строка не пустая.
- Optional chaining `rawNickname?....` не выполняется, если `rawNickname == nil`.
- `guard let` в `requireNickname` обеспечивает ранний выход с `throw`, если данные невалидны.
- После `guard` компилятор считает `nick` не-optional `String` в оставшейся части функции.

---

### `if case let` — один случай без полного switch

Когда интересен **один** вариант:
enum ValidationError: Error { case empty }

let rawNickname: String? = "  tim  "

if let nick = rawNickname?.trimmingCharacters(in: .whitespacesAndNewlines), !nick.isEmpty {
    print("Привет, \(nick)")
}

func requireNickname(_ value: String?) throws -> String {
    guard let nick = value?.trimmingCharacters(in: .whitespacesAndNewlines), !nick.isEmpty else {
        throw ValidationError.empty
    }
    return nick
}

Разбор:
- `if let` с несколькими условиями через запятую: распаковка optional и проверка, что строка не пустая.
- Optional chaining `rawNickname?....` не выполняется, если `rawNickname == nil`.
- `guard let` в `requireNickname` обеспечивает ранний выход с `throw`, если данные невалидны.
- После `guard` компилятор считает `nick` не-optional `String` в оставшейся части функции.

---

### `if case let` — один случай без полного switch

Когда интересен **один** вариант: