2015-02-10 70 views
2

在Swift中進行編程時,有時會看到包含$T0,$T1,$T2等的錯誤消息。看起來他們似乎與閉包有關。

此代碼工作正常:

let test = { (argument: Int) in 
    println("Argument is \(argument)") 
} 

test(42) 

Xcode的自動完成功能告訴我的test類型是(Int) ->(),因此,返回類型似乎推斷。

但是,如果我添加一個return語句關閉:

let test = { (argument: Int) in 
    println("Argument is \(argument)") 
    return 
} 

test(42) 

我得到一個錯誤說:

error: cannot convert the expression's type '(Int) -> (Int) -> $T0' to type '(Int) -> (Int) -> $T0' 

是什麼$T0意思?

回答

3

$ T0指的是一種匿名或未知類型,一般來說,如果您看到它,則表示類型推斷失敗,您可以通過更具體地輸入來消除問題。

在具體的情況下,你指的是編譯器目前在解決閉包類型時遇到問題,特別是當它們有返回語句並且沒有顯式類型時。爲了讓您的示例工作(也許你想在一個塊的中間一回),您可以更明確一些返回類型:

let test = { (argument: Int) -> Void in 
    println("Argument is \(argument)") 
    return 
} 

(注:類似的錯誤顯然雨燕1.2修復了數個主要類別)