在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
是什么意思?
答案 0 :(得分:3)
$ T0指的是匿名或未知类型,一般来说,如果你看到它,就意味着类型推断失败了,你可以通过更具体的输入来消除这个问题。
在您提到的特定情况下,问题是编译器当前在解析闭包类型时遇到问题,特别是当它们具有return语句而没有显式类型时。为了让你的例子起作用(也许你想要在一个块的中间返回),你可以明确关于返回类型:
let test = { (argument: Int) -> Void in
println("Argument is \(argument)")
return
}
(注意:显然Swift 1.2修复了几个类似错误的主要类别)