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

Ron*_*Ron 4 mkpolygon ios7 swift ios8

各位开发者,我正在尝试在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)
    }
}
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

在调用中缺少参数'interiorPolygons'的参数

根据文件: Apple Docu:

可变指针

当函数声明为接受UnsafeMutablePointer参数时,它可以接受以下任何一项:

  • nil,作为空指针传递
  • UnsafeMutablePointer值
  • 一个输入输出表达式,其操作数是类型为Type的存储左值,它作为左值的地址传递
  • 输入输出[类型]值,作为指向数组开头的指针传递,并在调用期间延长寿命

现在我认为我的方法是正确的,提供[CLLocationCoordinate2D]数组.有没有人遇到同样的问题,并找到了解决方法?

谢谢罗尼

Mik*_*e S 9

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

在调用中额外参数'interiorPolygons'

你的代码非常接近; 你只需要做一些小改动.在您引用的文档中,它表示您可以传递的一件事是:

输入输出[类型]值,作为指向数组开头的指针传递,并在调用期间延长寿命

所以,它正在寻找一个输入输入参数.这是通过coordinates前缀为a来完成的&,如下所示:

MKPolygon(coordinates: &coordinates, count: coordinates.count)
Run Code Online (Sandbox Code Playgroud)

但是,输入输出参数不能是常量.来自文档:

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

所以,你需要定义coordinates一个var第一:

if var coordinates: [CLLocationCoordinate2D] = object.geometry?.coordinates
Run Code Online (Sandbox Code Playgroud)

这使得整个函数看起来像这样:

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