Как я могу получить широту и долготу из моей структуры массива и создать маркер? - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в Swift и в настоящее время пытаюсь разрешить моему приложению отображать маркеры в моем представлении Google Maps.Широта и долгота сохраняются в структуре массива.По какой-то причине я не могу получить данные из моего массива. Итак, мои основные вопросы: почему он не работает и как он будет работать?

Кроме того, мне было интересно, сработает ли установка элементов struct для типа CLLocation?

struct pickerStruct 
{
var lat: Double
var long: Double
}

func showPickers() {

    //For every pickerStruct in pickers create a picker
    //The marker should have the in pickers saved latitude and longitude

    for pickerStruct in pickers {

        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: pickers.lat, longitude: pickers.long)
        marker.map = mapView

    }

}

Ошибка, которую я получаю, говорит: «Значение типа '[pickerStruct]' не имеет члена 'lat'"

Откуда происходят сборщики:

Сборщикимассив, который получает данные из моей базы данных Firebase.

    ref = Database.database().reference()

    ref.child("locations").observe(.childAdded, with: { snapshot in

        let newLat = snapshot.value as? NSDictionary
        let lat:Double = (newLat?["lat"] as? Double)!

        let newLong = snapshot.value as? NSDictionary
        let long:Double = (newLong?["long"] as? Double)!


        self.pickers.append(pickerStruct(lat: lat, long: long)) 
})

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Как и в случае с Лео Дабусом, упомянутым в комментариях, ваша функция showPickers должна выглядеть следующим образом: (Вы использовали средства выбора массива, а не одну структуру выбора элемента)

func showPickers() {

        //For every pickerStruct in pickers create a picker
        //The marker should have the in pickers saved latitude and longitude

        for pickerStruct in pickers {

            let marker = GMSMarker()
            marker.position = CLLocationCoordinate2D(latitude: pickerStruct.lat, longitude: pickerStruct.long)
            marker.map = mapView

        }

}
0 голосов
/ 13 февраля 2019

Проблема в том, что вы пытаетесь получить доступ к свойству массива lat, когда вам нужно получить доступ к свойству элемента.

for picker in pickers {
    let marker = GMSMarker()
    marker.position = CLLocationCoordinate2D(latitude: picker.lat, longitude: picker.long)
    marker.map = mapView
}
...