Запись результата CLGeocoder в Firestore

# #swift #firebase #google-cloud-firestore

Вопрос:

Нужна небольшая помощь с Swift и Firebase.

Этот код в getFriendlyLocation.swift …

 import UIKit
import CoreLocation
import Firebase
import FirebaseFirestore


class getfriendlyLocation: NSObject {

    let geocoder = CLGeocoder()
    var placemark: CLPlacemark!
    var countryCode: String!
    
    var db: Firestore!

    func initfriendlyLocation(lat:Double, lng:Double) {
        
        let location = CLLocation(latitude: lat, longitude: lng)
        
        geocoder.reverseGeocodeLocation(location) { (placemarks, error) in
            self.processResponse(withPlacemarks: placemarks, error: error)
            
            self.db.collection("main").addDocument(data: ["Country":"US"]) { err in
                if let err = err {
                    print("Error adding document: (err)")
                } else {
                    print("OK")
                }
            }
        }
    }
}
 

…выдает ошибку «Фатальная ошибка: неожиданно найдено ноль при неявном развертывании необязательного значения» в строке addDocument ().

Точно такой же блок кода отлично работает вне закрытия.

Блок processResponse сейчас ничего не делает, просто проверяет, возвращает ли он значения или нет, что он и делает.

Я вызываю getfriendlyLocation из ViewController.swift

 var friendlyLoc = getfriendlyLocation()
friendlyLoc.initfriendlyLocation(lat: lat, lng: lng)
 

Что отличается, когда этот блок кода находится внутри закрытия от внешнего?

Спасибо!

Добавление…

 func processResponse(withPlacemarks placemarks: [CLPlacemark]?, error: Error?) {
        if let error = error {
            print("ERROR")

        } else {           
            print("OK")
        }
    }
}
 

Комментарии:

1. Вам, вероятно, нужно показать processResponse

Ответ №1:

Проблема в том, что ваша db переменная равна нулю. Вы должны это сделать self.db = Firestore.firestore() , прежде чем использовать его. Вы можете поместить его в любое место перед вызовом addDocument.