Xcode 闭包中的inout参数使Swift编译器崩溃

Xcode 闭包中的inout参数使Swift编译器崩溃,xcode,swift,compiler-errors,closures,Xcode,Swift,Compiler Errors,Closures,我所需要做的就是在Swift中启动一个新项目并添加到main.Swift struct Foo { let bar: (inout baz: String) -> () } 当我尝试构建时,我得到一个错误: 由于信号:分段故障:11,命令失败 我做错什么了吗? 我认为可能不支持闭包中的inout参数,但如果我这样定义闭包: let baz: (inout baz: String) -> () = { baz in baz += "x" return } 甚至 var

我所需要做的就是在Swift中启动一个新项目并添加到
main.Swift

struct Foo {
  let bar: (inout baz: String) -> ()
}
当我尝试构建时,我得到一个错误:
由于信号:分段故障:11,命令失败

我做错什么了吗?

我认为可能不支持闭包中的
inout
参数,但如果我这样定义闭包:

let baz: (inout baz: String) -> () = { baz in
  baz += "x"
  return
}
甚至

var baz: (inout baz: String) -> ()?

它编译并运行正常

刚刚在Xcode 6.3 beta附带的Swift 1.2中对其进行了测试,编译成功。
因此,他们在上一个版本中解决了编译器上的一个bug。在您发布的代码中,有一个模棱两可的东西(粗体):“let bar:(inout baz:String)->()”。当这样定义函数时,您告诉编译器您将返回一个空元组。似乎早期版本的编译器没有区分(一定是类型推断引擎中的错误)Void类型和“空元组类型”(用“()”表示)。下面是关于元组语法的几句话:


可能的解决方案:明确指定返回值类型(在您的案例中为“Void”)。希望这有帮助。

我在apple bug reporter中打开了一张罚单。我认为这是一个错误。Swift编译器现在有点问题。在您的第一个示例中,编译器找不到类型。在第二个示例中,编译器可以找到您在中间接定义的原因。在上一个示例中,它只是一个可选项,因此存在总是正确的;这是失败的。