> On 2 Jan 2016, at 16:49, Maury Markowitz via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>> On Jan 2, 2016, at 9:38 AM, Nicky Gerritsen <nickygerrit...@me.com> wrote:
>> 
>> Defer is used to make code *always* run, even if the function terminates 
>> early. Imagine:
> 
> Which is precisely why I called it 'always'. So in your example:
> 
>    func doSomethingWith(x: Int) {
>       print(“1”)
>       defer { print(“2") }
>       if x > 3 { defer { print(“yay”); return }
>       print(“3”)
>    }
> 
> I would say:
> 
>    func doSomethingWith(x: Int) {
>       print(“1”)
>       print(“3”)
>        always {
>            print(“2")
>            if x > 3 { print(“yay”) }
>        }
>    }
> 
> This is functionally identical, but both the syntax and program flow are 
> greatly improved.

No your example is not functionally identical to Nicky’s (notwithstanding the 
missing closing brace in the original). “defer" defers the closure to the end 
of the current scope. In this instance , that is the end of the if block. The 
“yay” must come before the “2” because the if scope exits before the function 
scope. Also, in the following:

 func doSomethingWith(x: Int) {
    print("1")
    defer { print("2") }
    if x > 3 { defer { print("yay") } }
    print("3")
 }

doSomethingWith(4)

“yay” comes before “3” for the same reason.


> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to