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