【发布时间】:2020-09-25 17:38:48
【问题描述】:
extension CLGeocoder {
func reverseGeocodeLocationPublisher(_ location: CLLocation, preferredLocale locale: Locale? = nil) -> AnyPublisher<CLPlacemark, Error> {
Future<CLPlacemark, Error> { promise in
self.reverseGeocodeLocation(location, preferredLocale: locale) { placemarks, error in
guard let placemark = placemarks?.first else {
return promise(.failure(error ?? CLError(.geocodeFoundNoResult)))
}
return promise(.success(placemark))
}
}.eraseToAnyPublisher()
}
}
$stations.flatMap(maxPublishers: .max(1)) { (station) -> AnyPublisher<CLPlacemark, Error> in
let location = CLLocation(latitude: station.latitude, longitude: station.longitude)
self.geocoder.reverseGeocodeLocationPublisher(location)
}.eraseToAnyPublisher().sink(receiveCompletion: { completion in
print("done")
}, receiveValue: { placemark in
print("placemark:", placemark)
}).store(in: &cancellableSet)
错误:
Instance method 'flatMap(maxPublishers:_:)' requires the types 'Published<[Station]>.Publisher.Failure' (aka 'Never') and 'Error' be equivalent
我想要实现的是我有一个包含location 的电台列表,我想依次reverseGeocodeLocation
【问题讨论】:
-
您真正需要做的就是阅读错误信息。 :)