#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 объекта».
Надеюсь, это поможет и кое-что объяснит 🙂