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…
I love the idea of for in? (Or even for? In). You should pitch that to evolution.
···
Sent from my iPhone
On Feb 10, 2017, at 07:04, Tino Heth <2th@gmx.de> wrote:
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…
To me it would seem more logical as "for x in array? { }" — to parallel
"for case let x? in array { }"
···
On Fri, Feb 10, 2017 at 1:03 PM, Rick Mann via swift-users < swift-users@swift.org> wrote:
I love the idea of for in? (Or even for? In). You should pitch that to
evolution.
Sent from my iPhone
On Feb 10, 2017, at 07:04, Tino Heth <2th@gmx.de> wrote:
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…
With parentheses? I like "in?" because it mimics "as?".
···
Sent from my iPhone
On Feb 10, 2017, at 13:57, Jacob Bandes-Storch <jtbandes@gmail.com> wrote:
To me it would seem more logical as "for x in array? { }" — to parallel "for case let x? in array { }"
On Fri, Feb 10, 2017 at 1:03 PM, Rick Mann via swift-users <swift-users@swift.org> wrote:
I love the idea of for in? (Or even for? In). You should pitch that to evolution.
Sent from my iPhone
On Feb 10, 2017, at 07:04, Tino Heth <2th@gmx.de> wrote:
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…