ios - docs parse platform
Cómo convertir PFGeoPoint a CLLocation (4)
¿Es posible convertir el PFGeoPoint con Parse en una CLLocation?
Por lo que estoy tratando de obtener los nombres de lugares de PFGeoPoint así:
CLGeocoder *geocoder;
CLPlacemark *placemark;
PFGeoPoint *point = [object objectForKey:@"location"];
[geocoder reverseGeocodeLocation:point completionHandler:^(NSArray *placemarks, NSError *error) {
NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
if (error == nil && [placemarks count] > 0)
{
placemark = [placemarks lastObject];
NSLog(@"%@", placemarks);
}
}];
El error que obtengo obviamente es:
Incompatiable pointer types sending ''PFGeoPoint *'' to parameter of type ''CLLocation *''
CLLocation
crear explícitamente la instancia de CLLocation
usando initWithLatitude:longitude:
con la latitude
y longitude
desde PFGeoPoint
. Solo hay un método práctico para crear un PFGeoPoint
desde CLLocation
, y no al revés.
Como Wain dijo que no hay un método conveniente para convertir de PFGeoPoint
a CLLocation
, puedes hacer tu propio y extender PFGeoPoint
usando lo siguiente
import Parse
extension PFGeoPoint {
func location() -> CLLocation {
return CLLocation(latitude: self.latitude, longitude: self.longitude)
}
}
ahora puede devolver fácilmente un objeto CLLocation haciendo
let aLocation: CLLocation = yourGeoPointObject.location()
Siempre puede obtener el PFGeoPoint y luego agregarlo a CLLocationCoordinate2D de esta manera:
//get all PFObjects
let parseLocation = ParseObject["location"]
let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: parseLocation.latitude, longitude: parseLocation.longitude)
Basado en la respuesta de Justin Oroz (ver la respuesta a continuación): También una gran idea podría ser crear la extensión en el lado de CLLocation para que pueda ser creada usando un init de conveniencia que reciba el PFGeoPoint:
extension CLLocation {
convenience init(geoPoint: PFGeoPoint) {
self.init(latitude: geoPoint.latitude, longitude: geoPoint.longitude)
}
}