如何在Swift中使用泛型继承另一个类?

mig*_*ant 8 generics swift

我的协议和类是:

protocol Named {

}

class A<T: Named> {

}
Run Code Online (Sandbox Code Playgroud)

现在我想从P创建一个类内容:

class B: A {

}
Run Code Online (Sandbox Code Playgroud)

但编译错误占用,它说:

Reference to generic type 'A' requires arguments in <...>

请告诉我如何用泛型子类另一个类,谢谢!

San*_*eep 11

当我看到你的代码时,它似乎完全没问题,但我不知道你在课程中做了什么.这是一个简单的例子.

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
Run Code Online (Sandbox Code Playgroud)

请注意,当您从泛型类继承时,您必须将子类作为泛型,并且超类必须传递子类中使用的相同泛型变量.它似乎也需要显式类型转换来表示泛型(在我们的例子中是协议),请参阅类B中的初始化程序.初始化子类还需要在初始化为B()时传递显式泛型类型.这是我自己的实验.可以有简单而简洁的方法来做到这一点.