0
鉴于下面的函数声明闭合表达式{EXP} VS {返回EXP}
func foo(f:()->Foo) -> Bar
是什么在下面的代码两种变体使用闭合表达式的差:)
甲
let result = foo {
return Foo()
}
B)
let result = foo {
Foo()
}
请注意,常数result
的类型未指定,必须推断。
我问的原因是编译器似乎有所作为 - 至少目前。这是由于这样的事实:在很多情况下,当使用return Foo()
作为闭包表达式时,编译器无法推断闭包表达式的类型。另一方面,省略return
可能会由编译器发出另一个错误,因为它可能需要return
(尽管我不同意编译器,但是我离题了......)
这个问题通常可以通过完全解决指定闭合表达,例如:
let result = foo {() -> Foo in
return Foo()
}
或有时也可以通过明确地指定的result
类型来缓解。
相关:http://stackoverflow.com/q/26305402/335858 – dasblinkenlight 2014-10-11 10:51:52
dasblinkenlight: “这看起来像一个编译器错误给我。”我同意,这可能是一个明显的原因。我已经在几天(几个星期前)之前提交了一份相关的错误报告。 – CouchDeveloper 2014-10-11 10:55:37