[swift-evolution] for-else syntax

Anton Zhilin antonyzhilin at gmail.com
Wed Feb 1 11:16:10 CST 2017


You can write a helper method that adds a placeholder if the array is empty:

    for name in names.placeholder("no names") {
        print(name)
    }

Implementation:

    extension Collection {
        func placeholder(_ elem: Iterator.Element) -> PlaceholderView<Self>
{
            return PlaceholderView(collection: self, ifEmpty: elem)
        }
    }

    enum PlaceholderView<C: Collection> : Collection {
        case original(C)
        case placeholder(C.Iterator.Element)

        init(collection: C, ifEmpty: C.Iterator.Element) {
            if (collection.isEmpty) {
                self = .placeholder(ifEmpty)
            } else {
                self = .original(collection)
            }
        }

        // implement Collection conformance
    }

2017-02-01 19:48 GMT+03:00 Chris Davis via swift-evolution <
swift-evolution at swift.org>:

> Hi,
>
> Often when I’m programming I stumble upon this scenario:
>
> I have a list of items that may or may not be empty - if it’s full, I do
> one thing, if it’s empty I do something else, my code looks like this:
>
> class Example_1
> {
>     let names = ["Chris", "John", "Jordan"]
>
>
>     /// Loop over names, if no names, print no names
>     func run()
>     {
>         for name in names
>         {
>             print(name)
>         }
>
>
>         if names.count == 0
>         {
>             print("no names")
>         }
>     }
> }
>
> let exampleOne = Example_1()
> exampleOne.run()
>
> However, Personally, I would find it more pleasing to write something like
> this:
>
> class Example_2_Proposed
> {
>     let names:[String] = []
>
>
>     /// Loop over names, if no names, print no names
>     func run()
>     {
>         for name in names
>         {
>             print(name)
>         } else {
>             print("no names")
>         }
>     }
> }
>
> let exampleTwo = Example_2_Proposed()
> exampleTwo.run()
>
> The difference here is a “for-else” type syntax where if there were no
> items in the array it would simply fall through to the else statement.
>
> What would be the pros/cons of introducing such syntax?
>
> Is there’s a way of doing something similar in swift already?
>
> Thanks
>
> Chris
>
>
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170201/7c4b5923/attachment.html>


More information about the swift-evolution mailing list