我的协议和课程是:
protocol Named {
}
class A<T: Named> {
}
现在我想从P:
创建一个类内容class B: A {
}
但编译错误占据了,它说:
Reference to generic type 'A' requires arguments in <...>
请告诉我如何使用泛型继承另一个类,谢谢!
答案 0 :(得分:10)
当我看到你的代码时,它似乎完全没问题,但我不知道你在课程中做了什么。这是一个简单的例子。
protocol Named{
var firstName:String {get set}
var lastName: String {get set}
var fullName: String{ get }
}
class Person: Named{
var firstName: String
var lastName: String
var fullName: String{
return "\(firstName) \(lastName)"
}
init(firstName: String, lastName: String){
self.firstName = firstName
self.lastName = lastName
}
}
class A<T: Named>{
var named: T
init(named: T){
self.named = named
}
}
class B<M: Named>: A<M>{
init(){
let person = Person(firstName: "John", lastName: "Appleseed")
person.fullName
super.init(named: person as M)
}
}
let b = B<Person>()
b.named.fullName
请注意,当您从泛型类继承时,您必须将子类作为泛型,并且超类必须传递子类中使用的相同泛型变量。它似乎也需要显式类型转换来表示泛型(在我们的例子中是协议),请参阅类B中的初始化程序。初始化子类还需要在初始化为B()时传递显式泛型类型。这是我自己的实验。可以采用简单而简洁的方法来实现这一目标。