#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 никогда не выполняется. Я думаю, что это проблема.