首页 > 解决方案 > 创建 U 类型的类,其中 U 可以是任何协议

问题描述

由于我们现有的架构和项目要求,我有一个特定的需求(我认为过多的细节与这个问题无关)。

是否有可能拥有一个泛型类型 U ,其中 U 可以是任何类型的协议?这是我想要实现的 2 次尝试。当然,也不编译。

class BaseService<T> where T.Type == Protocol.Type {

}
extension BaseService: T {}
// error: Inheritance from non-protocol type 'T'

或者

protocol BaseServiceProtocol: class {}

class BaseService<T>: T where T == BaseServiceProtocol {
// error: Same-type requirement makes generic parameter 'T' non-generic
}

Swift 抱怨 T 不是一个类也不是一个协议,因此 BaseService 不能从它继承。

这有可能吗?这样做意味着我可以要求将我的服务作为他们的协议注入,但在我的课堂上我可以访问一个具体的实例。

谢谢你的任何提示。如果这(还)不可能,那么解释也很棒。

编辑

我的目标是能够在呼叫站点进行此操作:

let myService: BaseService<AwesomeServiceProtocol>

其中 myService 是响应协议的具体类。

标签: swiftgenerics

解决方案


推荐阅读