I am trying to remove overlays from map.
func removeMapOverlay() {
var removeOverlays : [AnyObject]! = self.mapView.overlays
// Above line throws runtime exception
self.mapView.removeOverlays(removeOverlays)
}
self.mapView.overlays
are type of AnyObject
array. var overlays: [AnyObject]! { get }
.
So initially I wrote
var removeOverlays = self.mapView.overlays
It throws EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
exception at this line on runtime.
So I did type casting for [AnyObject]
I don't know it is correct or not but it still gives me same exception at runtime.
Edit:
What I did for Objective C code was:
- (void) removeMapOverlay {
[self.mapView removeOverlays:[self.mapView overlays]];
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[self.mapView annotations]];
if ([tempArray containsObject:[MKUserLocation class]]) {
[tempArray removeObject:[MKUserLocation class]];
}
NSArray *annotationArray = [NSArray arrayWithArray:tempArray];
tempArray = nil;
[self.mapView removeAnnotations:annotationArray];
}
I tried to create similar method in Swift. But it throws an exception like I explain above.
For google maps iOS mapping (Swift 3 and latest iOS SDK), Documentation, you will set the overlay as nil like so
This worked for me:
I've just done this:
and it seems to work. Why do you define your overlays as a static variable?
EDIT:
This is what we've done to be able to use the global contains function to search a swift array and check if the element we're looking for exists inside the array or not. In this case we were searching for CLLocationCoordinate2D inside an array.