INOUT参数崩溃雨燕编译

问题描述:

所有我需要做的是开始斯威夫特一个新项目,并添加到main.swiftINOUT参数崩溃雨燕编译

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 2014-11-05 08:32:41

+0

在你的第一个例子中,编译器找不到类型。在第二个例子中,编译器可以找到间接定义的事实原因。在最后一个例子中,它只是一个可选项,所以存在将始终为真。 – Alex 2015-02-05 21:31:20

+0

你是对的;这失败了。 – 2015-02-12 07:26:51

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

@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”)。希望这可以帮助。