Swift no puede asignar un valor inmutable de tipo

¿Alguien puede explicar por qué recibo el error "no puedo asignar un valor inmutable de tipo [CLLocationCoordinate2D]" Daré dos escenarios. La razón por la que quiero que funcione el segundo es porque estaré en un ciclo y tendré que pasar eso a la function drawShape cada vez.

Este código funciona:

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) } 

Este código NO funciona:

 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) } 

No entiendo por qué esto no funciona. Incluso he println(coordinates) vs println(coords) y me da la misma salida para cada uno.

Al pasar parameters a una function, se pasan como inmutables de forma pnetworkingeterminada. Lo mismo que si los declaras como un let .

Cuando pasa el parámetro coords al método MGPolygon , se pasa como un parámetro inout , lo que significa que esos valores pueden cambiar, pero debido a que el parámetro es un valor inmutable por defecto, el comstackdor se queja.

Puede solucionarlo diciéndole explícitamente al comstackdor que este parámetro se puede modificar prefijándolo con una var .

 func drawShape(var coords: [CLLocationCoordinate2D]) { var shape = MGLPolygon(coordinates: &coords, count: UInt(coords.count)) mapView.addAnnotation(shape) } 

Prefijar un parámetro con var significa que puedes mutar ese valor dentro de la function.

Edit: Swift 2.2

Use la palabra key inout en inout lugar.

 func drawShape(inout coords: [CLLocationCoordinate2D]) { var shape = MGLPolygon(coordinates: &coords, count: UInt(coords.count)) mapView.addAnnotation(shape) }