Как отобразить вложенные данные в документе из Firestore от Swift? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть структура данных документа в Firestore, подобная этой: pic1 pic2 Таким образом, есть 2 объекта карты внутри документа и коллекция и другой документ внутри этого документа

Затем я создаю 3 файла модели swift для этого документа

задача:

struct task {
    var Name: String
    var Address: String
    var Car: CarModel
    car Price: PriceModel

    var dictionary: [String:Any] {
        return [
            "Name" : Name,
            "Address" : Address,
            "Car" : CarModel,
            "Price" : PriceModel
        ]
    }

    init?(data: [String:Any]) {
        guard let Name = dictionary["Name"] as? String,
            let Address = dictionary["Address"] as? String,
            let Car = ditionary["car"] as? CarModel,
            let Price = dictionary["price"] as? PriceModel else{
            return nil
        }
        self.Name = Name
        self.Address = Address
        self.Car = Car
        self.Price = Price
    }
}

CarModel :

struct CarModel {
    var brand: String
    var model: String
    var year: String


    var dictionary: [String:Any] {
        return [
            "brand" : brand,
            "model" : model,
            "year" : year,
        ]
    }

    init?(data: [String:Any]) {
        guard let brand = dictionary["brand"] as? String,
            let model = dictionary["model"] as? String,
            let year = ditionary["year"] as? String else{
            return nil
        }
        self.brand = brand
        self.model = model
        self.year = year
    }
}

PriceModel:

struct PriceModel {
    var basic: Int
    var extra: Int


    var dictionary: [String:Any] {
        return [
            "basic" : basic,
            "extra" : extra,
        ]
    }

    init?(data: [String:Any]) {
        guard let basic = dictionary["basic"] as? Int,
            let extra = ditionary["extra"] as? Int else{
            return nil
        }
        self.basic = basic
        self.extra = extra
    }
}

Затем загрузите данные с помощью следующего кода:

func loadDataFromFirestore(completion: @escaping (Bool) -> ()) {
        var success: Bool = false

        DispatchQueue.global(qos: .userInteractive).async {
            let downloadGroup = DispatchGroup()
            let colRef = db.collection("tasks")
            downloadGroup.enter()
            colRef.getDocuments() { (querySnapshot, error) in
                if let error = error {
                    print("Error: \(error)")
                    return
                }

                for document in querySnapshot!.documents{
                    let result = document.data()
                    print (result)
                    if let data = task(data: result){
                        print(data)
                    }
                }
                success = true

                downloadGroup.leave()
            }
            downloadGroup.wait()
            DispatchQueue.main.async {
                completion(success)
            }
        }
    }

Я могу получить данные с комментариями CarModel и PriceModel, но если я раскомментирую эти два, это приведет к сбою моего приложения!Итак, как я могу заставить объект карты адаптироваться к моему коду?И второй вопрос: как я могу получить документ в коллекции документов с таким кодом?

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