$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 修复了几个主要的 类 类似错误)
在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 修复了几个主要的 类 类似错误)