[英]Issue with Protocols with Associated Types in Swift
我有一个具有以下内容的框架ProviderFramework:
public class Provider {
public func fun(some: Model) {
}
}
public class Model {
public let id: Int
init(id: Int) {
self.id = id
}
}
和另一个具有以下内容的UserFramework:
public protocol ProviderProtocol {
func fun(some: ModelProtocol)
}
public protocol ModelProtocol {
var id: Int {get}
}
我想要的是使Provider类与ProviderProtocol类保持一致。 因此,在导入了前面提到的两个框架的框架中,我都有以下内容:
extension ProviderFramework.Model: UserFramework.ModelProtocol {}
extension ProviderFramework.Provider: UserFramework.ProviderProtocol {}
不幸的是,这导致第二一致性的错误。 因此,我尝试使用关联的类型,而我的ProviderProtocol变成了这样:
public protocol ProviderProtocol {
associatedtype T: ModelProtocol
func fun(some: T)
}
以及与此相关的问题:
extension ProviderFramework.Provider: UserFramework.ProviderProtocol {
public typealias T = ProviderFramework.Model
}
现在没有任何编译错误,但是如果我想使用Protocol这样的类型:
class Consumer {
var provider: ProviderProtocol?
}
我再次收到错误消息:“协议'ProviderProtocol'只能用作通用约束,因为它具有Self或关联的类型要求”
我希望能够做最后一件事。 我的代码中是否存在一些错误,或者如果没有,该问题是否有其他解决方案?
非常感谢。
根据第二种方法,为什么不使用Provider而不是ProviderProtocol? 由于您确认typealias T
如ProviderFramework.Model
类的扩展Provider
。
class Consumer {
var provider: Provider?
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.