[swift-users] for with optional collection?

Tino Heth 2th at gmx.de
Fri Feb 10 09:04:48 CST 2017


> Is there any concise way to write the following?
> 
> if let collection = someOptionalCollection
> {
>    for item in collection
>    {
>    }
> }
I've been thinking about that lately, but haven't had the time to look wether someone on evolution already proposed a "for in?"-loop…

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.

for i in? test {
	print(i)
}

Imho looks even better, but this would need an extension of the language itself…

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170210/79f03ffe/attachment.html>


More information about the swift-users mailing list