Отложенный блок не выполняется
У меня есть следующий быстрый код, выполняющийся на детской площадке:
func A() {
print ("Hello")
guard 1 == 2 else {
return
}
defer {
print ("World")
}
}
A()
Я ожидал увидеть
Hello
World
Вместо этого толькоHello
печатается. Почему это? Что мне не хватает?
Вот лучший пример:
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")
}
}
Согласно ответам и комментариям, правильный способ сделать это (с примером)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()
}
Выход теперь будет
Hello
World