Тип аргумента ‘[MGLPointAnnotation]’ не соответствует ожидаемому типу ‘MGLAnnotation’

#dictionary #annotations #mapbox #unwrap

#словарь #примечания #mapbox #развернуть

Вопрос:

Я недавно начал изучать swift и теперь сделал следующий шаг к созданию своей собственной карты. Я уже успешно создал приложение с mapkit, и теперь я испытываю свою удачу с mapbox, так как мне нравятся его конструктивные особенности.

Я создал словарь, в котором хранятся данные о моем местоположении, а затем я создаю цикл, который добавляет данные на мою карту. Однако теперь я застрял, так как получаю следующую ошибку:

» Тип аргумента ‘[MGLPointAnnotation]’ не соответствует ожидаемому типу ‘MGLAnnotation’

Это происходит, когда я пытаюсь MapView.addAnnotation с моим словарем. Я зашел так далеко, чтобы узнать, что это как-то связано с развертыванием значений в словаре, но когда я принудительно разворачиваю, написав MapView.addAnnotation (аннотации как! MGLAnnotation), мое приложение вылетает.

Может кто-нибудь показать мне правильное направление? Я не ищу исправление, а больше для того, чтобы выяснить, где я ошибаюсь. Большое спасибо!

Вот код:

 let locations = [
        ["name" : "Apple Inc.",
         "latitude" : 37.33187,
         "longitude" : -122.02951,
         "mediaURL" : "http://www.apple.com"],
        ["name" : "BJ's Restaurant amp; Brewhouse",
         "latitude" : 37.33131,
         "longitude" : -122.03175,
         "mediaURL" : "http://www.bjsrestaurants.com"]
    ]

    var annotations = [MGLPointAnnotation]()

    for dictionary in locations {
        let latitude = CLLocationDegrees(dictionary["latitude"] as! Double)
        let longitude = CLLocationDegrees(dictionary["longitude"] as! Double)
        let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
        let name = dictionary["name"] as! String
        let discription = dictionary["mediaURL"] as! String
        let annotation = MGLPointAnnotation()
        annotation.coordinate = coordinate
        annotation.title = "(name)"
        annotation.subtitle = "(discription)"
        annotations.append(annotation)
    }

mapView.addAnnotation(annotations as! MGLAnnotation)
  

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

1. Я все еще сталкиваюсь с этой проблемой. Если у кого-нибудь есть решение или просто общее направление, где я могу найти больше информации, я был бы очень признателен!

Ответ №1:

Вы пытаетесь преобразовать массив чего-либо в один объект другого… annotations является массивом, в то время MGLAnnotation как является одним объектом.

Поэтому измените mapView.addAnnotation(annotations as! MGLAnnotation) на mapView.addAnnotation(annotations as! [MGLAnnotation])

Это должно устранить вашу ошибку… Однако вы также используете метод addAnnotation , который ожидает только 1 объект в качестве аргумента. Так что попробуйте: mapView.addAnnotation(annotations[0])

Примечание: Моя первая часть решения просто демонстрирует решение ошибки — оно все равно не будет работать из-за ситуации «ожидание только 1 объекта».

Надеюсь, это поможет и кое-что объяснит 🙂