2014-11-04 64 views
16

所有我需要做的是開始斯威夫特一個新項目,並添加到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

回答

1

剛剛在Xcode 6.3 beta附帶的Swift 1.2中進行了測試,並且編譯成功。 所以這絕對是編譯器上的一個bug,他們在上一個版本中解決了

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」)。希望這可以幫助。