2015-09-29 18 views
18

Tôi đã có mã làm việc để xóa tất cả chú thích bản đồ bằng một nút nhưng sau khi cập nhật lên xcode 7, tôi gặp phải lỗi:Làm cách nào để xóa tất cả chú thích bản đồ trong nhanh chóng 2

Loại 'MKAnnotation' không phù hợp với giao thức 'SequenceType'

if let annotations = (self.mapView.annotations as? MKAnnotation){ 
    for _annotation in annotations { 
     if let annotation = _annotation as? MKAnnotation { 
      self.mapView.removeAnnotation(annotation) 
     } 
    } 
} 

Trả lời

40

Trong Swift 2 annotations được khai báo là không bắt buộc mảng [MKAnnotation] vì vậy bạn có thể dễ dàng viết

let allAnnotations = self.mapView.annotations 
self.mapView.removeAnnotations(allAnnotations) 

không bất kỳ loại đúc nào.

+0

Đã làm việc tuyệt vời! Cảm ơn bạn! – user4812000

13
self.mapView.removeAnnotations(self.mapView.annotations) 

Nếu bạn không muốn xóa vị trí người dùng.

self.mapView.annotations.forEach { 
    if !($0 is MKUserLocation) { 
    self.mapView.removeAnnotation($0) 
    } 
} 

Lưu ý: Mục tiêu-C giờ đây có hình ảnh đại diện, không cần thiết phải cast các phần tử của 'chú thích' nữa.

+0

Tôi muốn sử dụng mã của bạn nhưng nó nói: bất ngờ tìm thấy nil trong khi ... Tôi biết điều đó có nghĩa là gì nhưng tôi không có ý tưởng mà giá trị là nil. – Lenny1357

0

Vấn đề là có hai phương pháp. Một là removeAnnotation mà mất một đối tượng MKAnnotation, và khác là removeAnnotations mà mất một mảng của MKAnnotations, lưu ý "s" ở cuối của một và không phải là khác. Cố gắng truyền từ [MKAnnotation], một mảng đến MKAnnotation một đối tượng hoặc ngược lại sẽ làm hỏng chương trình. Dòng mã self.mapView.annotations tạo một mảng. Vì vậy, nếu bạn đang sử dụng phương pháp removeAnnotation, bạn cần phải chỉ số mảng cho một đối tượng duy nhất trong mảng, như bên dưới:

let previousAnnotations = self.mapView.annotations 
if !previousAnnotations.isEmpty{ 
    self.mapView.removeAnnotation(previousAnnotations[0]) 
} 

Vì vậy, bạn có thể loại bỏ các chú thích khác nhau trong khi vẫn giữ vị trí người sử dụng. Bạn nên luôn luôn kiểm tra mảng của bạn trước khi cố gắng để loại bỏ các đối tượng từ nó, khác có thể có được một trong giới hạn hoặc lỗi nil.

Lưu ý: sử dụng phương thức removeAnnotations (với một s) sẽ xóa tất cả chú thích. Nếu bạn đang nhận được một con số không, điều đó ngụ ý rằng bạn có một mảng trống. Bạn có thể xác minh điều đó bằng cách thêm một câu lệnh khác sau if, như vậy;

else{print("empty array")} 
Các vấn đề liên quan