有人能解释一下为什么我收到错误“无法分配类型为[CLLocation坐标2D]的不可变值”我将给出两种情况。我希望第二个工作的原因是因为我将处于循环中,并且每次都需要将其传递给DramShape func。
此代码有效:
func drawShape() {
var coordinates = [
CLLocationCoordinate2D(latitude: 40.96156150486786, longitude: -100.24319656647276),
CLLocationCoordinate2D(latitude: 40.96456685906742, longitude: -100.25021235388704),
CLLocationCoordinate2D(latitude: 40.96528813790064, longitude: -100.25022315443493),
CLLocationCoordinate2D(latitude: 40.96570116316434, longitude: -100.24954721762333),
CLLocationCoordinate2D(latitude: 40.96553915028926, longitude: -100.24721925915219),
CLLocationCoordinate2D(latitude: 40.96540144388564, longitude: -100.24319644831121),
CLLocationCoordinate2D(latitude: 40.96156150486786, longitude: -100.24319656647276),
]
var shape = MGLPolygon(coordinates: &coordinates, count: UInt(coordinates.count))
mapView.addAnnotation(shape)
}
此代码不起作用:
override func viewDidLoad() {
super.viewDidLoad()
// does stuff
var coords: [CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 40.96156150486786, longitude: -100.24319656647276),
CLLocationCoordinate2D(latitude: 40.96456685906742, longitude: -100.25021235388704),
CLLocationCoordinate2D(latitude: 40.96528813790064, longitude: -100.25022315443493),
CLLocationCoordinate2D(latitude: 40.96570116316434, longitude: -100.24954721762333),
CLLocationCoordinate2D(latitude: 40.96553915028926, longitude: -100.24721925915219),
CLLocationCoordinate2D(latitude: 40.96540144388564, longitude: -100.24319644831121),
CLLocationCoordinate2D(latitude: 40.96156150486786, longitude: -100.24319656647276),
]
self.drawShape(coords)
}
func drawShape(coords: [CLLocationCoordinate2D]) {
var shape = MGLPolygon(coordinates: &coords, count: UInt(coords.count)) //---this is where the error shows up
mapView.addAnnotation(shape)
}
我不明白为什么这不起作用。我甚至有println(坐标)
vsprintln(坐标)
,它给我相同的输出。
向函数传递参数时,默认情况下它们是不可变的。就像您将它们声明为let
一样。
当您将coord
参数传递给MGPolygon
方法时,它作为inout
参数传递,这意味着这些值可以更改,但由于参数默认是不可变值,编译器会抱怨。
您可以通过显式告诉编译器可以通过在其前面加上var
来修改此参数来修复它。
func drawShape(var coords: [CLLocationCoordinate2D]) {
var shape = MGLPolygon(coordinates: &coords, count: UInt(coords.count))
mapView.addAnnotation(shape)
}
用var
作为参数的前缀意味着您可以在函数中更改该值。
编辑:Swift 2.2
改用关键字inout
。
func drawShape(inout coords: [CLLocationCoordinate2D]) {
var shape = MGLPolygon(coordinates: &coords, count: UInt(coords.count))
mapView.addAnnotation(shape)
}