【问题标题】:What does $T0 mean in Swift?$T0 在 Swift 中是什么意思?
【发布时间】:2015-02-10 00:10:40
【问题描述】:

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

【问题讨论】:

    标签: swift compiler-errors


    【解决方案1】:

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

    在您提到的特定情况下,问题在于编译器当前在解析闭包类型时遇到问题,特别是当它们具有返回语句且没有显式类型时。为了让您的示例正常工作(也许您希望在块中间返回),您可以明确返回类型:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      相关资源
      最近更新 更多