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

时间:2014-09-24 02:32:31

标签: ios7 swift ios8 mkpolygon

研究员, 我正在尝试在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'的参数

根据文件: Apple Docu:

  

可变指针

     

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

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

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

感谢 罗尼

1 个答案:

答案 0 :(得分:9)

你得到的错误是Swift的神秘方式,说它无法找到符合你参数的方法。如果您尝试传递interiorPolygons参数,则会产生同样令人困惑的情况:

  

调用

中的额外参数'interiorPolygons'

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

  

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

所以,它正在寻找in-out parameter。通过传递前缀为coordinates的{​​{1}}来完成,如下所示:

&

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

  

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

因此,您需要首先使用MKPolygon(coordinates: &coordinates, count: coordinates.count) 定义coordinates

var

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

if var coordinates: [CLLocationCoordinate2D] = object.geometry?.coordinates