我有一个测图仪,如下所示
protocol MapperProtocol {
associatedtype T
associatedtype U
func map(item: T) -> U?
}
我想把它注入到一个类中,如下所示
protocol ParserProtocol {
associatedtype T
associatedtype U
func parse(from: T) -> U?
}
class TrackParser: ParserProtocol {
typealias T = String
typealias U = Track
private let mapper: MapperProtocol
init(mapper: MapperProtocol) {
self.mapper = mapper
}
func parse(from path: String) -> Track? {
guard let data = try? Data(contentsOf: URL(filePath: path)) else { return nil }
return mapper.map(item: data)
}
}
TrackParser
将从其他地方初始化,因此它不需要知道Map器的具体类型。
当我想以这种方式实现它时,我会得到以下错误。
有什么办法可以修复它吗?
1条答案
按热度按时间pod7payv1#
注意,
parse
实现要求Map器具有T == Data
和U == Track
,但您没有在TrackParser
中的任何位置指定这些约束。我们可以将
T
和U
作为MapperProtocol
的primary associated types,这样相同类型的需求就可以很容易地指定为MapperProtocol<Data, Track>
。此外,从SWIFT 5.7开始,存在词类型需要以“
any
”为前缀,因此您可以这样写: