"guard" statement in Swift

class Stack<T> {
    var items: [T?] = [T?]()
    
    func push(item: T) {
        items.append(item)
    }
    
    func pop() -> T? {
        guard items.count > 0 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