We can already do this nicely with map and flatMap:

var removedElement = index.map { arr.removeAtIndex($0) }

> On 12 Jul 2016, at 16:16, Liam Stevenson via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Optional chaining is one of the great, useful features of Swift. It can be 
> used “for querying and calling properties, methods, and subscripts on an 
> optional that might currently be nil,” to quote Apple's "The Swift 
> Programming Language.” However, often it is necessary to call a function, 
> subscript, or initializer conditionally based on if one or more parameters 
> are nil. The proposed solution is to allow a question mark (?) to be placed 
> after an optional value wished to be used as a parameter. Then, the function, 
> initializer, or subscript will be called if and only if the parameter's value 
> is not nil. If it has a return type, it will return an optional, which will 
> be nil if the parameter is nil.
> 
> Old way (with seemingly unnecessary if statement considering the flexibility 
> provided by optional chaining):
>       var arr = ["apples", "oranges", "pears", "bananas"]
>       let index: Int? = 2
> 
>       var removedElement: String?
>       if let index = index {
>               removedElement = arr.removeAtIndex(index) //sets removedElement 
> to "pears"
>       }
> Using this proposal:
>       var arr = ["apples", "oranges", "pears", "bananas"]
>       let index: Int? = 2
> 
>       var removedElement: String?
>       removedElement = arr.removeAtIndex(index?) //sets removedElement to 
> “pears"
> Another similar example:
> Old way:
>       var arr = ["apples", "oranges", "pears", "bananas"]
>       let index: Int? = nil
> 
>       var removedElement: String?
>       if let index = index {
>               removedElement = arr.removeAtIndex(index) //never called
>       }
> Using this proposal:
>       var arr = ["apples", "oranges", "pears", "bananas"]
>       let index: Int? = nil
> 
>       var removedElement: String?
>       removedElement = arr.removeAtIndex(index?) //removeAtIndex is never 
> called, and removedElement is set to nil
> 
> What does everyone think of this proposal? It is additive so it will not 
> break any existing code, and in the future it will provide conciseness and 
> clarity since the syntax is similar to the existing optional chaining syntax.
> 
> View the full proposal on GitHub here: 
> https://github.com/liam923/swift-evolution/blob/master/proposals/NNNN-extend-optional-chaining-to-function-initializer-and-subscript-parameters.md
>  
> <https://github.com/liam923/swift-evolution/blob/master/proposals/NNNN-extend-optional-chaining-to-function-initializer-and-subscript-parameters.md>
> 
> Liam
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to