Как передать определенный элемент из массива в другое представление или функцию? стриж - PullRequest
1 голос
/ 04 ноября 2019

Я загружаю данные с сервера и передаю их в массив. Эти данные включают в себя координаты, текст, изображения и т. Д. Также он содержит переменную с именем «id» (я думал о сортировке массива по определенному идентификатору, но не уверен, является ли это хорошим решением). Эти данные используются для отображения маркеров на карте. Моя задача - показать детали этого маркера в отдельном окне. Как узнать на этом экране подробностей, какой маркер был выбран или как получить определенный элемент из массива на основе выбранного маркера?

Здесь я создаю маркеры:

for element in spots {
        let image = UIImage(named: element.type)

        let position = CLLocationCoordinate2D(latitude: element.coordinates.latitude, longitude:
            element.coordinates.longitude)
        marker = GMSMarker(position: position)
        marker.icon = image
        marker.map = mapView
    }

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Вы можете использовать метод делегата GMS, чтобы проверить, какой маркер прослушивается.

for element in spots {
    let image = UIImage(named: element.type)

    let position = CLLocationCoordinate2D(latitude: element.coordinates.latitude, longitude:
        element.coordinates.longitude)
    marker = GMSMarker(position: position)
    marker.icon = image
    marker.map = mapView
    // add the element info to marker userData property 
    marker.userData = element
}


// function to check if which icon tapped

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {

    // get the element info from marker
    let element = marker.userData
    //code to navigate to detail view
}

Надеюсь, это поможет!

0 голосов
/ 04 ноября 2019

Это довольно общий вопрос, и существует множество способов передачи данных между объектами в Swift / Cocoa, например, segues, делегаты, уведомления, шаблон синглтона или просто прямая инициализация с внедрением зависимости или без него:

let separateView = SeparateView()
separateView.marker = marker // Note that you need a var defined in your separate view in order to set it sooner, marker is your marker defined from before
navigationController?.pushViewController(separateView, animated: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...