[swift-users] Compact iteration of optional collection?

Kerry Hazelgren hazelgren at me.com
Fri Jul 29 01:21:51 CDT 2016


Like Rick, I had also wondered about a simple way to do this. Perhaps this is a question for swift-evolution, but wouldn’t it be desirable if Swift supported:

 for item in someOptionalContainer?
 {
 }

which seems more natural and intuitive that the alternatives that have been suggested.

Kerry

> On Jul 28, 2016, at 5:18 PM, Zhao Xin via swift-users <swift-users at swift.org> wrote:
> 
> You can try container?.forEach(), like
> 
> let bb:[String:Int]? = ["aa":1, "bb":2, "cc":3]
> bb?.forEach { print($0) }
> /* 
> ("aa", 1)
> ("bb", 2)
> ("cc", 3)
> */
> 
> Zhaoxin
> 
> On Fri, Jul 29, 2016 at 6:14 AM, Saagar Jha via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
> The nil check and creating an empty array have very similar performance, in my naïve testing. 
> 
> Saagar Jha
> 
> 
> 
>> On Jul 28, 2016, at 14:59, Jacob Bandes-Storch via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>> 
>> You should test it out — I'd guess there's a good chance it gets optimized out.
>> On Thu, Jul 28, 2016 at 2:58 PM Rick Mann <rmann at latencyzero.com <mailto:rmann at latencyzero.com>> wrote:
>> Yeah, I suppose that works. Feels a bit clunky, like the language lacks specific support for this (in that it provides specific support for so many other common constructs). But I guess I can make do with that.
>> 
>> I suppose there's a bit of a performance hit, in that constructing an empty array and iterating over it is more expensive than a simple nil check, but that's unlikely to cause issues in practice.
>> 
>> Thanks.
>> 
>> > On Jul 28, 2016, at 14:56 , Jacob Bandes-Storch <jtbandes at gmail.com <mailto:jtbandes at gmail.com>> wrote:
>> >
>> > How about "for item in someOptionalContainer ?? []"  ?
>> >
>> > On Thu, Jul 28, 2016 at 2:55 PM, Rick Mann via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>> > I often call methods that return an optional collection. I then iterate over it. The problem is, it's a bit cumbersome to write:
>> >
>> >      if let container = someOptionalContainer
>> >     {
>> >         for item in container
>> >         {
>> >         }
>> >     }
>> >
>> > I wish I could just write
>> >
>> >     for item in someOptionalContainer
>> >     {
>> >     }
>> >
>> > such that if the optional is nil, it just skips the iteration altogether.
>> >
>> > Is there a syntax for that (especially in Swift 3)?
>> >
>> >
>> > --
>> > Rick Mann
>> > rmann at latencyzero.com <mailto:rmann at latencyzero.com>
>> >
>> >
>> > _______________________________________________
>> > swift-users mailing list
>> > swift-users at swift.org <mailto:swift-users at swift.org>
>> > https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
>> >
>> 
>> 
>> --
>> Rick Mann
>> rmann at latencyzero.com <mailto:rmann at latencyzero.com>
>> 
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org <mailto:swift-users at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org <mailto:swift-users at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160728/981fe9c7/attachment.html>


More information about the swift-users mailing list