【发布时间】:2021-03-11 09:14:02
【问题描述】:
我有一个这样的联合发布者:
enum RemoteError: Error {
case networkError(Error)
case parseError(Error)
case emptyResponse
}
func getPublisher(url: URL) -> AnyPublisher<Entiy, RemoteError> {
return URLSession.shared
.dataTaskPublisher(for: url)
.map(\.data)
.decode(type: RemoteResponse.self, decoder: decoder)
.mapError { error -> RemoteError in
switch error {
case is URLError:
return .networkError(error)
default:
return .parseError(error)
}
}
.map { response -> Entiy in
response.enitities.last
}
.eraseToAnyPublisher()
}
struct RemoteResponse: Codable {
let enitities: [Entity]
let numberOfEntries: Int
}
struct Entity {
}
通过上述设置,编译器会报错,因为response.enitities.last 可以为 nil。问题是我可以用 Empty 发布者替换 nil 吗?如果不能,我可以用 Combine 链中的错误 emptyResponse 替换它吗?第一个选项更可取。
【问题讨论】:
标签: swift reactive-programming combine