Ios7 使用Swift的MKPolygon(调用中缺少参数';interiorPolygons';的参数)

Ios7 使用Swift的MKPolygon(调用中缺少参数';interiorPolygons';的参数),ios7,swift,ios8,mkpolygon,Ios7,Swift,Ios8,Mkpolygon,各位开发人员, 我尝试在mapview上实现多边形覆盖,如下所示: private func drawOverlayForObject(object: MyStruct) { if let coordinates: [CLLocationCoordinate2D] = object.geometry?.coordinates { let polygon = MKPolygon(coordinates: coordinates, count: coordinates.cou

各位开发人员, 我尝试在mapview上实现多边形覆盖,如下所示:

private func drawOverlayForObject(object: MyStruct) {
    if let coordinates: [CLLocationCoordinate2D] = object.geometry?.coordinates {
        let polygon = MKPolygon(coordinates: coordinates, count: coordinates.count)
        self.mapView.addOverlay(polygon)
    }
}
出现以下错误:

调用中缺少参数“interiorPolygons”的参数

根据文件:

可变指针

当一个函数被声明为接受一个不可配置的指针时 参数时,它可以接受以下任一项:

  • nil,作为空指针传递
  • 不可配置的指针值
  • 一种输入输出表达式,其操作数是类型为的存储左值,作为左值的地址传递
  • 一个in-out[Type]值,作为指向数组开头的指针传递,并在调用期间延长生存期
现在我认为我的方法是正确的,提供了一个[CLLocationCoordinate2D]数组。是否有人遇到过同样的问题并找到了解决方法

谢谢
Ronny

您得到的错误是Swift用一种神秘的方式说它找不到与您的参数匹配的方法。如果您确实尝试传递
interiorPolygons
参数,您会得到同样令人困惑的结果:

调用中的额外参数“interiorPolygons”

你的代码非常接近;你只需要一些小的改变。在您引用的文档中,它指出您可以传递的内容之一是:

一个in-out[Type]值,它作为指针传递到 数组,并在调用期间延长生存期

所以,它正在寻找一种新的方法。这是通过传递前缀为
&
坐标来完成的,如下所示:

MKPolygon(coordinates: &coordinates, count: coordinates.count)
但是,输入输出参数不能是常量。从文档中:

只能将变量作为输入输出参数的参数传递。 不能将常量或文字值作为参数传递,因为 无法修改常量和文字

因此,首先需要使用
var
定义
坐标

if var coordinates: [CLLocationCoordinate2D] = object.geometry?.coordinates
这使得整个函数如下所示:

private func drawOverlayForObject(object: MyStruct) {
    if var coordinates: [CLLocationCoordinate2D] = object.geometry?.coordinates {
        let polygon = MKPolygon(coordinates: &coordinates, count: coordinates.count)
        self.mapView.addOverlay(polygon)
    }
}

我的最终解决方案是从几个教程中挑选并集成:

func setPolylineFromPoints(locations:[CLLocation]){
    if locations.count == 0 {
        return;
    }
// while we create the route points, we will also be calculating the bounding box of our route
// so we can easily zoom in on it.
    var pt : UnsafeMutablePointer<MKMapPoint>? // Optional
    pt = UnsafeMutablePointer.alloc(locations.count)
    for idx in 0..<locations.count-1 {
       let location = locations[idx]
       let point = MKMapPointForCoordinate(location.coordinate);
       pt![idx] = point;
    }
    self.polyline = MKPolyline(points:pt!, count:locations.count-1)
// clear the memory allocated earlier for the points
    pt?.destroy()
    pt?.dealloc(locations.count)
}  
func setPolylineFromPoints(位置:[CLLocation]){
如果locations.count==0{
返回;
}
//在创建管线点的同时,我们还将计算管线的边界框
//所以我们可以很容易地放大它。
变量pt:Unsafemeutablepointer?//可选
pt=UnsafeMutablePointer.alloc(locations.count)

对于0中的idx。不幸的是,至少在Swift 2.1中,此代码生成:“&”与类型为“Unsafemeutablepointer”的非inout参数@FabrizioBartolomucci一起使用。如果
坐标
是用
let
定义的,而不是
var
。因为
let
使
坐标
不可变,所以不能是我们作为
inout
参数编辑(在本例中,Swift 2.1仍有一个半隐式错误)。