[swift-evolution] @noescape and nil
Chris Lattner
clattner at apple.com
Wed Apr 27 00:20:51 CDT 2016
> On Apr 26, 2016, at 6:58 PM, Daniel Duan <daniel at duan.org> wrote:
>
> Wouldn't this work in Swift 3 though?
>
> func testFunc(times: Int, fn: (@noescape (Int)->Void)? = nil) { … }
Yes, that got implemented in Swift 3, with a narrow Optional-specific hack :-)
-Chris
>
> Sent from my iPad
>
> On Apr 26, 2016, at 11:26 AM, Chris Lattner via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>
>>
>>> On Apr 26, 2016, at 12:15 AM, Aleksandar Petrovic via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> 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
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160426/82c474b3/attachment.html>
More information about the swift-evolution
mailing list