[swift-evolution] Better syntax for deferred?

Jeremy Pereira jeremy.j.pereira at googlemail.com
Mon Jan 4 08:17:35 CST 2016


> On 2 Jan 2016, at 16:49, Maury Markowitz via swift-evolution <swift-evolution at swift.org> wrote:
> 
>> On Jan 2, 2016, at 9:38 AM, Nicky Gerritsen <nickygerritsen at 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 at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list