Defer block is not executed
23:56 22 Mar 2016

I have the following swift code executing in playground:

func A() {
    print ("Hello")
    guard 1 == 2 else {
        return
    }
    defer {
        print ("World")
    }
}
  
A()

I expected to see

Hello
World

Instead only the Hello is printed. Why is this? What am I missing?

Here is a better example:

enum MyError: ErrorType {
    case TriggerDefer
}

func throwsMyError() throws {
    let myzero = Int(arc4random_uniform(1))
    
    guard myzero > 1 else {
        throw MyError.TriggerDefer
    }
}

func A() throws {
    try throwsMyError()
    
    defer {
        print ("Hello World")
    }
}

As per the answers and comments, the correct way to do this (with an example) is

enum MyError: ErrorType {
    case TriggerDefer
}

func throwsMyError() throws {
    let myzero = Int(arc4random_uniform(1))

    print("Hello")

    guard myzero > 1 else {
        throw MyError.TriggerDefer
    }
}

func A() throws {        
    defer {
        print ("World")
    }
     
    try throwsMyError()
}

The output will now be

Hello
World
swift defer-keyword