[swift-evolution] Warning on the '(T...) -> U' to '(T...) -> ()' conversion

Joe Groff jgroff at apple.com
Mon Feb 8 21:32:58 CST 2016


> On Feb 8, 2016, at 7:25 PM, Joe Groff via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Javier Soto brought up a case where his ReactiveCocoa code silently did the wrong thing by implicitly discarding the result of a closure:
> 
> https://twitter.com/Javi/status/695680700033306624
> 
> Since it sounds like we plan on making `@warn_unused_result` the default, it seems natural to also warn when a closure has its result type converted away to Void. If there's one 'return' statement, we could dive into the return expression to decide whether to warn based on the function whose result is getting ignored.

There's another axis of intent in whether the closure was written with an explicit return or not. `{ foo($0) }` is ambivalent to whether it intends to propagate the value returned by `foo` or not, whereas `{ return foo($0) }` is explicitly trying to do so. IMO we have a stronger case to warn if the `return` is explicit in the closure body.

-Joe


More information about the swift-evolution mailing list