Ошибка преобразования типа при чтении данных из Firebase - PullRequest
0 голосов
/ 10 октября 2019

Я использую mapkit для создания приложения, в то время как я пытаюсь получить местоположение пользователя из firebase, оно вызывает ошибку в этих трех строках

let dict = recipeSnap.value as! [String:Double?]

let latitude = dict["latitude"] as? Double?

let longitude = dict["longitude"] as? Double?.

Я пытался заменить double на строку, нопроизошла новая ошибка, затем я попытался заменить ее на AnyObject, она работает, но данные похожи на Optional (37.785834). и это всегда вызывает ошибку, пока я использую данные AnyObject для других целей.

вот мой код

@objc func updateTimer(){

    print("Update location")
    let location = locman.location!.coordinate
    lat = String(location.latitude)
    long = String(location.longitude)
    print(lat)
    print(long)
    let ref = Database.database().reference()
    ref.child("location/User1/longitude").setValue(long)
    ref.child("location/User1/latitude").setValue(lat)
    ref.child("location").observeSingleEvent(of: .value) { (snapshot) in
          self.usern = snapshot.childrenCount
          for snap in snapshot.children{
              let aSnap = snap as! DataSnapshot  
              let dict = aSnap.value as! [String:Double?]
              let latitude = dict["latitude"] as? Double?
              let longitude = dict["longitude"] as? Double?
              print(dict)
              print(latitude)
              print(longitude)

              let point = MKPointAnnotation()
              point.title = "user"
            //point.coordinate = CLLocationCoordinate2D(latitude: CLLocationDegrees(latitude), longitude: CLLocationDegrees(longitude))
              self.mapView.addAnnotation(point)
        }
    }
}

и вот моя ошибка

МожетНе приведите значение типа «Swift._NSContiguousString» (0x1032681f8) к «NSNumber» (0x1b7a1abf0). 2019-10-10 20:24:05. mapkitMap [1468: 709956] Не удалось привести значение типа «Swift._NSContiguousString» (0x1032681f8) к «NSNumber» (0x1b7a1abf0). Необязательно (37.785834)

, пока я пытаюсь заменить Double на строку, появляется новая ошибка

Не удалось преобразовать значение типа '__NSCFNumber' (0x1b7a0e0e0) в 'NSString'(0x1b7a1aad8). 2019-10-10 20: 20: 32.1 mapkitMap [1465: 708355] Не удалось преобразовать значение типа '__NSCFNumber' (0x1b7a0e0e0) в 'NSString' (0x1b7a1aad8).

1 Ответ

0 голосов
/ 10 октября 2019

Вы, похоже, храните некоторые из ваших latitude и longitude в виде строковых значений,

lat = String(location.latitude)
long = String(location.longitude)

, поэтому вы не можете просто извлечь их из базы данных в виде чисел. Вам нужно будет прочитать их из базы данных как строки, а затем проанализировать их числовое значение.

Что-то вроде:

  let aSnap = snap as! DataSnapshot  
  let latitude = Double(snap.childSnapshot(forPath: "latitude").value)
  let longitude =  Double(snap.childSnapshot(forPath: "longitude").value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...