Не удалось преобразовать значение типа XX в XX в swift 3

#mapkit #swift3

#mapkit #swift3

Вопрос:

В Swift 3 метод contains всегда выдает ошибку. В приведенном ниже коде if annotation is MKAnnotation передается и переходит к следующей строке. Затем это выдает ошибку. Я много искал, но не смог найти проблему. Есть решение этой проблемы?

Объявление класса:

 open class FBAnnotation : NSObject {
  open var coordinate = CLLocationCoordinate2D(latitude: 52.0936440, longitude: 4.3592340)
  open var title: String? = ""
  open var annotationIndex: Int?
}

extension FBAnnotation : MKAnnotation {
}
  

Использование:

 do {
   if annotation is MKAnnotation {
      if try node.annotations.contains(where: annotation as! (MKAnnotation) throws -> Bool) {
          try node.annotations.remove(at: node.annotations.index(where: annotation as! (MKAnnotation) throws -> Bool)!)
          node.count -= 1
          return true
      }
   }
} catch {
    return false
}
  

Комментарии:

1. какой тип node? Также вместо is вы можете использовать if let для разворачивания аннотации: if let annotation = аннотация как? MKAnnotation {

Ответ №1:

Это работает на игровой площадке, приведение не требуется. Вы не можете передать аннотацию в качестве параметра where. Вы должны передать функцию, которая объявляет, является ли аннотация той, которую вы ищете. Здесь я считаю их совпадающими, если они имеют одинаковые координаты, хотя ваши критерии соответствия могут отличаться.

     var annotations = [MKAnnotation]()
    var annotation: Any? = nil
    if let annotation = annotation as? MKAnnotation {
        if let index = annotations.index(where: {
            $0.coordinate.latitude == annotation.coordinate.latitude  amp;amp;
            $0.coordinate.longitude == annotation.coordinate.longitude
        }) {
            annotations.remove(at: index)
        }
    }
  

Комментарии:

1. где закрытие условия никогда не возвращает true в этом случае

2. Я обновил свой вопрос, чтобы показать тип узла. Здесь узлом является FBAnnotation, это тип MKAnnotation

3. На самом деле закрытие внутри where никогда не выполняется. Я думаю, что это проблема.