[swift-evolution] [Draft] Tuple-Based Compound Optional Binding

Brent Royal-Gordon brent at architechies.com
Sun Jun 12 12:28:39 CDT 2016

>> guard let (a, b, c) = (opt1, opt2, opt3) else { ... }
> You mention `guard case` in the motivation, but I think for the uninitiated reader it would be fair to point out that the following example already works equivalently, with only a few extra characters:
> guard case let (a?, b?, c?) = (opt1, opt2, opt3) else { ... }

It seems fair to mention that, so I've added it to the "Alternatives Considered" entry for doing nothing.
Not accepting this proposal

This proposal does not add new functionality; it merely removes keyword clutter. However, it offers a convenient replacement for a commonly-used feature which has just been removed as a result of grammatical ambiguity, not user confusion or lack of utility.

The same functionality is also available through case conditions:

guard case let (a?, b?, c?) = (opt1, opt2, opt3) else { ... }
However, all of optional binding is redundant with case conditions; we keep it anyway because it's a convenient shorthand and saves beginners from having to learn about pattern matching. Multiple bindings are a natural fit for the subset of case features available through optional binding.

Brent Royal-Gordon

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160612/4f2bb833/attachment.html>

More information about the swift-evolution mailing list