1
let foo = { () -> (foo:Int, bar:Int) in return (1, 2) }()

在 Xcode 6 Playground 中,foo.bar返回 2。但是,在swift命令行* 中,它返回:

<REPL>:28:1: error: 'Int' does not have a member named 'bar'
foo.bar
^   ~~~

*/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift

4

1 回答 1

2

最初,我认为您可能已将闭包分配给foo而不是实际调用它的结果。

但是,从阅读您的错误消息来看,实际上您似乎在拨打电话之前已经分配了一个Int值。foofoo.bar

我能想象的唯一会导致这种行为的情况是,如果您事先声明foo了一个 int 值,然后尝试重新定义它以分配闭包。虽然 REPL 似乎重新定义了 foo,但它不会,并且不会发出警告或错误。见下文:

重新定义 foo


启动一个新的 REPL 并确保没有发生这种情况,它似乎工作正常。

REPL 输出

于 2014-06-06T10:19:02.847 回答