Convert MKMapPoint to NSValue in Swift

前端 未结 3 1882
星月不相逢
星月不相逢 2021-01-19 08:22

I want to convert an MKMapPoint to a NSValue. In Objective-C i can do it with the following statement:

MKMapPoint point = MKMapPointForCoordinate(location.co         


        
相关标签:
3条回答
  • 2021-01-19 08:38

    It isn't possible in Swift, but you can still create a category in ObjC and use it in your Swift project

    // NSValue+MKMapPoint.h
    @interface NSValue (MKMapPoint)
    
    + (NSValue *)valueWithMKMapPoint:(MKMapPoint)mapPoint;
    - (MKMapPoint)MKMapPointValue;
    
    @end
    
    
    // NSValue+MKMapPoint.m
    @implementation NSValue (MKMapPoint)
    
    + (NSValue *)valueWithMKMapPoint:(MKMapPoint)mapPoint {
        return [NSValue value:&mapPoint withObjCType:@encode(MKMapPoint)];
    }
    
    - (MKMapPoint)MKMapPointValue {
        MKMapPoint mapPoint;
        [self getValue:&mapPoint];
        return mapPoint;
    }
    
    @end
    

    The usage in Swift:

    let mapValue = CGValue(MKMapPoint: <your map point>)
    let mapPoint = mapValue.MKMapPointValue();
    
    0 讨论(0)
  • 2021-01-19 08:58

    Sadly this is currently not possible in Swift.

    0 讨论(0)
  • 2021-01-19 09:04

    I think Leo's answer isn't correct anymore, I managed to convert array of MKMapPoint to an array of CGPoint with the code below :

    let polygonView = MKPolygonRenderer(overlay: overlay)
    let polyPoints = polygonView.polygon.points() //returns [MKMapPoint]
    var arrOfCGPoints : [CGPoint] = []
    for i in 0..<polygonView.polygon.pointCount {
        arrOfCGPoints.append(polygonView.point(for: polyPoints[i])) //converts to CGPoint
        }
    print(arrOfCGPoints)
    //prints [(10896.74671715498, 10527.267575368285), (10830.46552553773, 10503.901612073183), (10741.784851640463, 10480.270403653383), (10653.04738676548, 10456.62348484993), (10566.442882657051, 10409.803505435586)]
    

    And to NSValue :

    ler someCgPoint = arrOfCGPoints[0]
    var pointObj = NSValue(CGPoint: someCgPoint)
    
    0 讨论(0)
提交回复
热议问题