我们说我们有一个协议:
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类的这个参数实例,我们怎么能这样做呢?我可以在这个函数中以某种方式省略泛型吗?
答案 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
。