Ios7 使用Swift的MKPolygon(调用中缺少参数';interiorPolygons';的参数)
各位开发人员, 我尝试在mapview上实现多边形覆盖,如下所示: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
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]值,作为指向数组开头的指针传递,并在调用期间延长生存期
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仍有一个半隐式错误)。