I don’t think it is worth changing from defer to the more traditional try 
finally block, both have pros and cons. Just work with what we have. You can 
always, as a matter of style, put a single defer block at the end of scope 
instead of multiple defers throughout the block.


> On 5 Jan 2016, at 1:17 AM, Jeremy Pereira via swift-evolution 
> <[email protected]> wrote:
> 
>> 
>> On 2 Jan 2016, at 16:49, Maury Markowitz via swift-evolution 
>> <[email protected]> wrote:
>> 
>>> On Jan 2, 2016, at 9:38 AM, Nicky Gerritsen <[email protected]> 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
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected] <mailto:[email protected]>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to