swift中未使用的类型参数

时间:2015-02-06 10:59:59

标签: swift

是否有关键字可以放置未使用的类型参数?

在此示例中,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

1 个答案:

答案 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