swift组合平面图顺序操作

问题描述 投票:0回答:1
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

swift combine flatmap
1个回答
0
投票

您看到的错误是由于Publishers.FlatMap所致,它要求上游发布者和新发布者的Failure相同。 FlatMap返回Failure类型的Error,但是$stationsFailureNever,因此您需要使用以下方法进行调整:

.setFailureType(to: Error.self)
© www.soinside.com 2019 - 2024. All rights reserved.