I'm glad that you agree with me. However, my proposal has been marked as out of 
scope for swift 3.0, so we'll have to wait a month or so to bring this back up 
again. 

> On Jul 13, 2016, at 10:24 AM, char...@charlesism.com 
> <charlesism....@gmail.com> wrote:
> 
> +1
> 
> I'm in favour of this, or something similar. It currently requires a bit more 
> effort to deal with an optional that appears as an argument. It would be a 
> bit nicer to make decisions about control flow when the amount of effort your 
> choices require aren't affected by things like this.
> 
> 
> 
> Sent from my iPhone
> 
>> On Jul 12, 2016, at 7:16 AM, 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
>> 
>> 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