我想从函数中获取价值。功能上有一个障碍。当块执行时,该功能已返回该值。我尝试了许多不同的方法,但它们并没有帮助我。我用NSOperation和调度。该函数始终返回值,直到执行块为止。
NSOperation
var superPlace: MKPlacemark! func returnPlaceMarkInfo(coordinate: CLLocationCoordinate2D) -> MKPlacemark? { let location = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude) geocoder.reverseGeocodeLocation(location) { (arrayPlaceMark, error) -> Void in if error == nil { let firstPlace = arrayPlaceMark!.first! let addressDictionaryPass = firstPlace.addressDictionary as! [String : AnyObject] self.superPlace = MKPlacemark(coordinate: location.coordinate, addressDictionary: addressDictionaryPass) } } return superPlace }
您不能简单地返回此处,因为reverseGeocodeLocation函数正在异步运行,因此您将需要使用自己的完成块:
var superPlace: MKPlacemark! func getPlaceMarkInfo(coordinate: CLLocationCoordinate2D, completion: (superPlace: MKPlacemark?) -> ()) { let location = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude) geocoder.reverseGeocodeLocation(location) { (arrayPlaceMark, error) -> Void in if error == nil { let firstPlace = arrayPlaceMark!.first! let addressDictionaryPass = firstPlace.addressDictionary as! [String : AnyObject] self.superPlace = MKPlacemark(coordinate: location.coordinate, addressDictionary: addressDictionaryPass) completion(superPlace: superPlace) } else { completion(superPlace: nil) } } }