Поток управления / Условные операторы

class Stack<T> {
    var items: [T?] = [T?]()

    func push(_ item: T) {
        items.append(item)
    }

    func pop() -> T? {
        guard !items.isEmpty else {
            return nil
        }
        return items.removeLast()
    }
}

let stack = Stack<Int>()
stack.push(1)
let n1 = stack.pop()
//n1 is Optional(1)
let n2 = stack.pop()
//n2 is nil

print("n1 is \(n1!)")
print("n2 is", n2 as Any)


Оператор guard, как и оператор if, выполняет код в зависимости от логического значения выражения. Используете оператор guard, чтобы убедиться, что условие истинно, для выполнения кода после него. В отличие от оператора if, оператор guard всегда имеет предложение else. Код внутри предложения else выполняется, если условие неверно.