是否有关键字可以放置未使用的类型参数?
在此示例中,receiver
不使用T
的{{1}}。
在Java语言中,可以编写MyGen
。
我找不到快速语言文件中的对应物。
MyGen<?> v
我知道给import Foundation
class MyGen<T: Printable> {
var value: T
init(v: T) {
value = v
}
}
func receiver(v: MyGen<WHAT_COMES_HERE>) {
println(v);
}
let s = MyGen<NSString>(v: "hello")
receiver(s)
一个类型参数可以解决这个问题,但是不受欢迎,因为上限receiver
和函数一样重复,代码有冗余信息。
Printable
答案 0 :(得分:0)
在Swift中,尽管没有使用它,你必须声明一个类型参数。但是,您在这里不需要:Printable
,您可以只使用T
或其他任何内容。
func receiver<A>(v: MyGen<A>) {
println(v)
}
仅当:
需要更专业的receiver
时才使用MyGet.T
作为类型参数。例如:
class MyGen<T: Printable> {
var value: T
init(v: T) {
value = v
}
}
// `receiver` accepts `MyGen` only if its `T` is a sequence of `Int`
func receiver<A: SequenceType where A.Generator.Element == Int>(v: MyGen<A>) {
println(reduce(v.value, 0, +))
}
let s = MyGen<[Int]>(v: [1,2,3])
receiver(s) // -> 6