改变PromiseKit恢复的回报值

时间:2018-01-16 01:32:59

标签: ios swift promisekit

我想使用CLGeocoderalways生成CLLocation,无论地理编码调用是否失败。

很遗憾,如果没有捕获外部变量,您就无法获得always的值,并且在地理编码调用之后直接放置recover要求recover返回CLPlacemark 1}}或Promise<CLPlacemark>,这要求我不必要地创建CLPlacemark只是为了生成我已经拥有的默认CLLocation

// build error because recover's return type must be the same as geocode's
CLGeocoder().geocode(postalCode).recover { error -> CLLocation in

目前,我有这个解决方法:

CLGeocoder().geocode(postalCode)
                    .then { placemark -> CLLocation in
                        guard let location = placemark.location else {
                            throw GeocodeError
                        }
                        return location
                    }
                    .recover { error -> CLLocation in
                        // ... make a default CLLocation
                        return defaultLocation
                    }
                    .then { location -> Void in // this is like an always
                        // handle location
                    }

有没有更好的方法来实现我想要的?

如果recover承诺失败但未在其后直接链接,是否可以保证调用geocode

0 个答案:

没有答案