闭包中的inout参数会导致Swift编译器崩溃

17

我只需要在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
我在苹果的错误报告中打开了一张工单。我认为这是一个bug。Swift编译器现在有点不稳定。 - Shuo
在你的第一个例子中,编译器找不到类型。在你的第二个例子中,编译器可以找到它,因为你间接定义了它。在最后一个例子中,它只是可选的,所以存在性总是为真。 - Alex
你是正确的;这个失败了。 - Alex Brown
2个回答

1

我刚在带有Xcode 6.3 beta的Swift 1.2中进行了测试,编译成功。 所以这绝对是编译器上的一个错误,在最新版本中已经解决。


0

@Bartek Chlebek。在您发布的代码中,有一件模糊的事情(用粗体表示):“let bar:(inout baz:String) ->()”。定义函数时,这样做会告诉编译器您将返回一个空元组。似乎早期版本的编译器没有区分Void类型和“空元组类型”(用()表示)。关于元组语法,以下是一些内容:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-ID448

可能的解决方案: 明确指定返回值类型(在您的情况下为“Void”)。希望能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接