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

时间:2014-11-04 23:17:49

标签: xcode swift compiler-errors closures

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

struct Foo {
  let bar: (inout baz: String) -> ()
}

当我尝试构建时,我收到错误:
Command failed due to signal: Segmentation fault: 11

我做错了吗?

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

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

甚至

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

它编译并运行正常

2 个答案:

答案 0 :(得分:1)

刚刚在Xcode 6.3 beta附带的Swift 1.2中进行了测试,并且编译成功。 所以它绝对是他们在上一个版本中解决的编译器错误

答案 1 :(得分:0)

@Bartek Chlebek。在你发布的代码中,有一个含糊不清的东西(以粗体显示):"让bar :( inout baz:String) - > ()&#34 ;.在定义您的函数时,您告诉编译器您将返回一个空元组。似乎编译器的早期版本没有区分(必须是类型推断引擎中的错误)Void类型和"空元组类型" (用&#34表示; ()")。以下是关于元组语法的几个词:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-ID448

可能的解决方案:明确指定返回值类型(在您的情况下为" Void")。希望这会有所帮助。