0
相關類型的協議我有下列內容之一的框架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
}
現在沒有任何編譯錯誤,但是如果我想使用該協議作爲一種類型是這樣的:
class Consumer {
var provider: ProviderProtocol?
}
我再次得到一個錯誤:「協議‘PROVIDERPROTOCOL’只能作爲一種通用的約束,因爲它具有自我或ssociated型需求
我希望能夠做的最後一件事。我的代碼中是否存在一些錯誤,或者如果沒有,是否存在針對此問題的其他解決方案?
非常感謝。
此: 擴展提供者:PROVIDERPROTOCOL { 公共FUNC樂趣(一些:ModelProtocol){} } 增加了一個功能,提供者類,這是不是我的觀點。我想獲得 公共FUNC樂趣(部分:模型) 功能以某種方式使Provider類符合PROVIDERPROTOCOL使原來的方法調用的樂趣功能時被調用。 –
爲什麼不直接改變類供應商?聽起來像Provider類被鎖定,無法更改它?所以你想使用擴展來覆蓋原來的行爲? –
如果我將Provider類更改爲符合ProviderProtocol,則必須在ProviderFramework中導入UserFramework,以創建它們之間不相關的依賴關係。我想在導入它們的框架之外的第三個類中解析依賴項。 –