Данные Firebase и неожиданный ноль - PullRequest
2 голосов
/ 10 октября 2019

Моя конечная цель - отображать аннотации на карте из MapKit. Однако загрузка данных из firebase не работает. Вот код:

var hotels = [Hotel]()

override func viewDidLoad() {
    super.viewDidLoad()
    map.delegate = self
    checkLocationServices()
    observe()
}

Наблюдаемая функция выглядит следующим образом:

func observe() {
        Data().getAllHotel { (hotelA) -> (Void) in
            if let hotel = hotelA {
                print("hotel: ", hotel)
                self.hotels.append(hotel)
                let hotelAnnotation = MKPointAnnotation()
                hotelAnnotation.title = "\(hotel.hotelName)"
                hotelAnnotation.coordinate = CLLocationCoordinate2D(latitude: hotel.latitude, longitude: hotel.longitude)
                self.map.addAnnotation(hotelAnnotation)
            }
        }
}

Обратите внимание, что печать в операторе if не пустая. Однако строка hotelAnnotation.title вызывает ошибку неожиданно ноль, и я не понимаю, почему.

Кроме того, здесь есть функция getAllHotel внутри класса данных:

func getAllHotel(closure: HotelClosure?) {
        let ref = Ref().databaseHotels
        ref.observe(.childAdded) { (snapshot) in
            if let dict = snapshot.value as? Dictionary<String, AnyObject> {
                let hotel = self.fromDictToHotel(key: snapshot.key, dict: dict)
                closure?(hotel)
            } else {
                closure?(nil)
            }
        }
    }

    func fromDictToHotel(key: String, dict: Dictionary<String, AnyObject>) -> Hotel? {
        guard let hotelName = dict["name"] as? String else { return nil }
        guard let latitude = dict["latitude"] as? Double else { return nil }
        guard let longitude = dict["longitude"] as? Double else { return nil }
        let hotelDescription = dict["description"] as? String
        let hotelGrade = dict["grade"] as? Double
        let hotelImageUrl = dict["hotelImageUrl"] as? String

        let hotel = Hotel(hid: key, hotelName: hotelName, hotelDescription: hotelDescription, latitude: latitude, longitude: longitude, grade: hotelGrade, url: hotelImageUrl)
        return hotel
    }

Заранее спасибоза вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...