[swift-evolution] Add an ifPresent function to Optional

David Waite david at alkaline-solutions.com
Thu Mar 24 10:30:43 CDT 2016

> On Mar 23, 2016, at 3:36 PM, Andrey Tarantsov via swift-evolution <swift-evolution at swift.org> wrote:
>> * Are the current stdlib names for optional map and flatMap misleading?
> Not so much misleading, as being unfortunate when optionals and collections end up as neighbors in the code.
>> * Are the current stdlib functions for optional closure application appropriate and sufficient?
>> public func f1<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?
>> public func f2<U>(@noescape f: (Wrapped) throws -> U!) rethrows -> U!
>> public func f3<U>(@noescape f: (Wrapped) throws -> U) rethrows -> Void
> I don't see why flatMap needs to be separate from map. It just does not make sense. I would only have
> public func f2<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U?
> and would call it "ifPresent", "then", "unwrap", "transform" or something like that.

Optionals of Optionals are valid, and it would be ambiguous which would be returned from a map overloaded to allow both optional and non-optional transform functions. So, map always assumes the transform returns a non-optional, and if it returns an optional value (and that was not what you wanted) you have to flatten. Hence flatMap to combine the two steps.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160324/5b6306e8/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 496 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160324/5b6306e8/attachment.sig>

More information about the swift-evolution mailing list