$T0 在 Swift 中是什么意思?

What does $T0 mean in Swift?

在Swift中编程时,有时我会看到包含$T0$T1$T2等的错误消息。似乎它们与闭包有关.

这段代码工作正常:

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

test(42)

Xcode 的自动完成告诉我 test 的类型是 (Int) -> (),因此 return 类型似乎是推断出来的。

但是如果我在闭包中添加一个 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 是什么意思?

$T0指的是一个匿名的,或者未知的类型,一般来说,如果你看到它,就意味着类型推断失败,你可以通过更具体的类型来消除问题。

在您提到的特定情况下,问题是编译器当前在解析闭包类型时遇到问题,特别是当它们具有 return 语句且没有显式类型时。为了让你的例子工作(也许你想要一个 return 在一个块的中间)你可以明确 return 类型:

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

(注意:显然 Swift 1.2 修复了几个主要的 类 类似错误)