Swift Firestore предотвращает проверку, если ключ словаря существует - PullRequest
0 голосов
/ 06 октября 2019

У меня есть этот кусок кода, который возвращает результаты запроса Firestore. Поскольку я хочу убедиться, что значения существуют, я проверяю каждое из них, например if let driverLat = packageDetails["driverLat"] as? Double.. etc, и также приводю их. Это становится действительно раздражающим, и я задавался вопросом, есть ли лучшее решение для этого?

db.collection("packages").document(documentID).getDocument() { (document, error) in
    if let document = document, document.exists {
        if let packageDetails = document.data() as [String: AnyObject]? {
            if let driverLat = packageDetails["driverLat"] as? Double, let driverLon = packageDetails["driverLon"] as? Double {
                if let destinationLat = packageDetails["destinationLat"] as? Double, let destinationLon = packageDetails["destinationLon"] as? Double {
                    // more code
                }
            }
        }
    }
}

1 Ответ

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

Я бы сказал, что вы должны использовать несколько guard-let операторов. Это предотвращает код в форме пирамиды, который уменьшает читабельность.

Это будет выглядеть так:

typealias Json = [String: AnyObject]

db.collection("packages").document(documentID).getDocument() { (document, error) in
    guard let document       = document, document.exists else { return }
    guard let packageDetails = document.data() as Json? else { return }

    guard let driverLat      = packageDetails["driverLat"] as? Double else { return }
    guard let driverLon      = packageDetails["driverLon"] as? Double else { return }

    guard let destinationLat = packageDetails["destinationLat"] as? Double else { return }
    guard let destinationLon = packageDetails["destinationLon"] as? Double else { return }

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