[swift-evolution] for in? optionalCollection {
Tino Heth
2th at gmx.de
Sun Feb 12 07:45:21 CST 2017
Most alternatives already where discussed in swift-user:
> Imho the "forEach" solution is flawed, because you can't break the loop, and the "?? []" isn't perfect either:
> I hope the compiler can optimise so that the assembly is as fast as the "if let" solution, but even if this is the case, it is not obvious for a human reader.
>
> This
>
> extension Optional where Wrapped: Sequence {
> var elements: [Wrapped.Iterator.Element] {
> switch (self) {
> case .none:
> return []
> case .some(let o):
> return Array(o)
> }
> }
> }
>
> let test: [Int]? = nil
> for i in test.elements {
> print(i)
> }
>
> looks nice to me (except the return type — I guess there are better options), but I don't expect that the compiler can do much to optimise it.
But maybe there is something better:
for i in test? {
print(i)
if i == 42 {
break
}
}
This doesn't work — but it compiles fine when you replace the "?" with "!".
I haven't proposed "in?" earlier because it would be a new keyword (even if its not that new…), and I'm very skeptical towards such changes.
But it is a very common pattern in Swift to have a "!" form that may crash and a save "?" variant, so I think it is actually missing in the syntax of for-loops.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170212/2dc240f6/attachment.html>
More information about the swift-evolution
mailing list