我想从函数中获取值.有功能块.当块执行时,函数已经返回值.我尝试了很多不同的方法,但他们没有帮助我.我使用了NSOperation和Dispatch.该函数始终返回值,直到执行块为止.
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,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) } } }