什么$ T0在Swift中意味着什么?

时间:2015-02-10 00:10:40

标签: swift compiler-errors

在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是什么意思?

1 个答案:

答案 0 :(得分:3)

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

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

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

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