如何将PFGeoPoint转换为CLLocation

5

能否将Parse中的PFGeoPoint转换为CLLocation?

原因是我想从PFGeoPoint获取地点名称,如下所示:

   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);

                                }
                            }];

我收到的明显错误是:


Incompatiable pointer types sending 'PFGeoPoint *' to parameter of type 'CLLocation *'
4个回答

6
正如Wain所说,目前没有方便的方法将PFGeoPoint转换为CLLocation,但是您可以自己编写代码来扩展PFGeoPoint,使用以下方式:
import Parse

extension PFGeoPoint {

    func location() -> CLLocation {
        return CLLocation(latitude: self.latitude, longitude: self.longitude)
    }
}

现在,您可以通过执行以下操作轻松返回CLLocation对象:

let aLocation: CLLocation = yourGeoPointObject.location()

5

您需要使用initWithLatitude:longitude:创建CLLocation实例,并使用PFGeoPointlatitudelongitude。仅有一种方便的方法可以从CLLocation创建PFGeoPoint,而不是反过来。


2

基于Justin Oroz的答案(见下面的答案): 还有一个很好的想法是在CLLocation方面创建扩展,以便可以使用接收PFGeoPoint的convenience init来创建它:

extension CLLocation {
    convenience init(geoPoint: PFGeoPoint) {
        self.init(latitude: geoPoint.latitude, longitude: geoPoint.longitude)
    }
}

0
你可以通过以下方式获取PFGeoPoint并将其添加到CLLocationCoordinate2D中:
//get all PFObjects

let parseLocation = ParseObject["location"]

let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: parseLocation.latitude, longitude: parseLocation.longitude)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接