Как я могу сопоставить документ Firestore со структурой? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть модель, которая выглядит следующим образом:

import Foundation
import CoreLocation
struct Address {

    //    let dateCreated: Date
    let street: String?
    let city: String?
    let state: String?
    let postalCode: String?
    let country: String?
    let ISOCountryCode: String?
    var coordinates: CLLocationCoordinate2D?
    var active: Bool?

    init?(dictionary: [String : Any]) {
        self.street = dictionary["street"] as? String
        self.city = dictionary["city"] as? String
        self.state = dictionary["state"] as? String
        self.postalCode = dictionary["postalCode"] as? String
        self.country = dictionary["country"] as? String
        self.ISOCountryCode = dictionary["ISOCountryCode"] as? String
        self.coordinates = dictionary["coordinates"] as? CLLocationCoordinate2D
        self.active = dictionary["active"] as? Bool
    }
}

У меня есть запрос к документам в Firebase Firestore.Я хочу сопоставить каждый документ с типом объекта, который должен быть;в данном случае это адрес.

Например, я getDocuments, а затем я начинаю циклически перебирать каждый документ в snapshot.documents.Мой код (который не работает) для сопоставления документа с типом объекта выглядит следующим образом:

let closure: (Dictionary<String, Any>) -> String?
closure = { dictionary in
    return Address(dictionary: dictionary)
}
var addresses = [Address]()

addresses = document.data().flatMap(closure)

Я получаю следующие ошибки:

Cannot assign value of type '([String : Any]) -> Address?' to type '(Dictionary<String, Any>) -> String?'

Cannot convert value of type '(Dictionary<String, Any>) -> String?' to expected argument type '((key: String, value: Any)) -> String?'

Я уверен, что это что-то простое, я просто не уверен, что я могу сделать, чтобы это исправить.: /

1 Ответ

0 голосов
/ 01 июня 2018

Попробуйте:

func getAddresses(at path: String, completion: @escaping (([Address]) -> ())) {
    let data = Firestore.firestore().collection(path)
    data.getDocuments { (snapshot, error) in
        let dictionaries = snapshot?.documents.compactMap({$0.data()}) ?? []
        let addresses = dictionaries.compactMap({Address($0)})
        completion(addresses)
    }
}

Кроме того, flatMap устарела, вместо compactMap, когда замыкание возвращает необязательное значение

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