Wouldn't this work in Swift 3 though?

func testFunc(times: Int,  fn: (@noescape (Int)->Void)? = nil) { … }

Sent from my iPad

> On Apr 26, 2016, at 11:26 AM, Chris Lattner via swift-evolution 
> <[email protected]> wrote:
> 
> 
>> On Apr 26, 2016, at 12:15 AM, Aleksandar Petrovic via swift-evolution 
>> <[email protected]> wrote:
>> 
>> Hi Swift community, I have a question.
>> 
>> This is a valid Swift code:
>> 
>> func testFunc(times: Int, fn: ((Int)->Void)? = nil) {
>>      guard let f = fn else { return }
>>      for i in 1 ..< times {
>>              f(i)
>>      }
>> }
>> 
>> And this is not:
>> 
>> func testFunc(times: Int, @noescape fn: ((Int)->Void)? = nil) {
>>      guard let f = fn else { return }
>>      for i in 1 ..< times {
>>              f(i)
>>      }
>> }
>> 
>> I can't think of any hard reason why the @noescape parameter of the function 
>> can't be nullable (and, with default value, be optional), but maybe I'm 
>> missing something. Is there any plan to correct this in 3.0?
> 
> There are two ways to fix this: a horrible hack that special cases optionals, 
> or the more principled solution that treats optional as the underlying enum 
> type that it is, and making @noescape propagate through to the members of the 
> .some case.
> 
> You can probably guess this, but I’d prefer to discuss fixing the full 
> generality of the problem, not providing a special case in the compiler for 
> this.
> 
> -Chris
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to