我想使用CLGeocoder
和always
生成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
?