苦苦挣扎一段时间,如果你能对此有所了解,将会非常有帮助:
我有APIWorkerProtocol
有财产要求,所需属性是协议,DataParserProtocol
protocol APIWorkerProtocol {
var apiRequestProvider : APIRequestGeneratorProtocol {get}
var dataParser : DataParserProtocol{get}
func callAPI(completionHandler: @escaping (APICallResult<Self.ResultType>) -> Void)
}
protocol DataParserProtocol {
associatedtype ExpectedRawDataType
associatedtype ResultType
func parseFetchedData(fetchedData : ExpectedRawDataType) -> APICallResult<ResultType>
}
我怎样才能做到这一点?
在当前的实现中,这会导致错误Protocol 'DataParserProtocol' can only be used as a generic constraint because it has Self or associated type requirements
。
提前致谢
ANKIT
答案 0 :(得分:1)
如果协议使用Self
或相关类型要求(同质协议),我们可能会注意使用协议作为具体类型。
因此,您可以添加DataParserProtocol
类型的所有者,而不是使用dataParser
作为APIWorkerProtocol
属性的具体类型(在associatedtype
中进行蓝图),而不是DataParser
1}},APIWorkerProtocol
,被约束为符合 DataParserProtocol
的类型。
另外,我不确定在Self.ResultType
的完成处理程序中使用callAPI(...)
作为特化的意图是什么(因为Self
将引用实现{{1}的类型一个蓝图没有APIWorkerProtocol
associatedtype
)的协议:你的意思是使用ResultType
类型的ResultType
吗?
E.g。
DataParserProtocol