我有一个基本的通用类:
class SharedClass<T> {}
和它的建设者:
class SharedClassBuilder {
func build<T>() -> SharedClass<T>? {
return ...
}
}
我希望能够做的是返回一个继承SharedClass
并符合T
的实例。例如:
protocol MyObject {
func doIt()
}
var result: SharedClass<MyObject>? = SharedClassBuilder().build()
result?.doIt()
不幸的是,Swift编译器抱怨返回的类型没有名为doIt
的成员。
有没有办法实现我正在寻找的东西?
答案 0 :(得分:1)
我怀疑并不是因为你希望返回的类受泛型类型的限制,因为你要求返回的类是的实例约束类型。在您的代码段中,您希望展开的result
符合MyObject
。更进一步,这意味着SharedClass
的一致性完全取决于它的构造方式。据我所知,Swift不支持。
然而,没有什么可以阻止你让SharedClass
的成员成为T
。有点像:
class SharedClass<T> {
var v : T?
}
class SharedClassBuilder {
func build<T>() -> SharedClass<T>? {
return SharedClass()
}
}
protocol MyObject {
func doIt()
}
var result: SharedClass<MyObject>? = SharedClassBuilder().build()
result?.v?.doIt()