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
