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]数组.有没有人遇到同样的问题,并找到了解决方法?
谢谢罗尼
你得到的错误是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)