研究员, 我正在尝试在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]数组。有没有人遇到同样的问题并找到了解决方法?
感谢 罗尼
答案 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