【发布时间】:2021-04-23 03:09:52
【问题描述】:
我是新手,我正在尝试为我的应用编写网络层。
我的网络电话是
protocol NetworkRequest {
associatedtype model
func decode(_ data:Data) -> AnyPublisher<model,Error>
}
extension NetworkRequest {
fileprivate func load<model>(_ url:URL, session:NetworkSession = URLSession.shared) -> AnyPublisher<model,Error> {
return session.loadData(for: URLRequest(url: url))
.mapError { error in
.network(description: error.localizedDescription)
}
.flatMap(maxPublishers: .max(1)) { pair in
self.decode(pair.data)
}
.eraseToAnyPublisher()
}
}
我的解码方法是
func decode(_ data:Data) -> AnyPublisher<model,Error>
我的 session.loadData 是
func loadData(for URLRequest: URLRequest) -> AnyPublisher<(data: Data, response: URLResponse), URLError>
问题是我收到错误Type of expression is ambiguous without more context
我不确定我在这里做错了什么。我只是想用decode方法来获取发布者。
【问题讨论】:
-
您没有提供足够的信息。当我通过弥补缺失的东西来提供足够的信息时,你的代码编译得很好!请展示足够多的真实代码,让我尝试编译它并得到你得到的错误。
-
@matt 请看我的新编辑。
-
Combine 有解码操作符时为什么需要解码函数?
-
@JoakimDanielson 因为目的是构建一个通用 NetworkRequest,它可以与其他形式的数据一起使用,例如构建 UIImage 而不仅仅是解码 JSON