没有为Swift类指定泛型类型

时间:2017-01-21 14:27:49

标签: swift generics

我们说我们有一个协议:

protocol Animal {
}

实现此协议的两个类:

class Dog: Animal {
}

class Bear: Animal {
}

和使用此协议的通用:

class A<T: Animal> {
}

现在我可以创建另一个类:

class B: A<Dog> {
}

class C: A<Bear> {
}

我希望你理解案例。现在我们有一个协议,其中包含A类实例作为参数:

protocol SomeProtocol {

    func something(a: A)
}

我希望在课堂上实现这个协议,例如d。

class D: SomeProtocol {

    func something(a: A) {
    }
}

但它不会编译,因为我们必须为A指定泛型,如果我们想要发送B类或C类的这个参数实例,我们怎么能这样做呢?我可以在这个函数中以某种方式省略泛型吗?

1 个答案:

答案 0 :(得分:1)

  

我可以在这个函数中以某种方式省略泛型吗?

不,如果没有其占位符,您目前无法谈论通用类型。但是,您只需在函数中引入一个新的本地通用占位符,即可在调用站点满足占位符。

protocol SomeProtocol {
    func something<T>(a: A<T>)
}

class D : SomeProtocol {
    func something<T>(a: A<T>) {
        // ...
    }
}

如果传入B的实例,T将为Dog。在传递C的实例的情况下,T将是Bear