Задачи Firebase в Swift / iOS - PullRequest
       6

Задачи Firebase в Swift / iOS

0 голосов
/ 17 февраля 2020

Я android разработчик, который учится писать свое приложение для iOS, используя swift. Я не уверен, как запустить несколько Firebase (Firestore и базы данных в реальном времени), писать задачи асинхронно и возвращать обработчик завершения. В android я использую API-интерфейс задач и записал его следующим образом:

Task<Void> firestoreTask = firestoreDB.getDocument("users/someId").update("name", "some name");

Task<Void> realtimeTask = realtimeDB.child("users/someId/name/").setValue("some name");

Tasks.whenAll(firestoreTask, realtimeTask).addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // if both tasks are successful
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // if at least one of the two task fails
            }
        });

Не могу понять, как написать такую ​​задачу в swift. Может кто-нибудь указать мне правильное направление? Спасибо.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Следующий код поможет вам решить эту проблему

import Foundation

// Create a dispatch group object and add a didset observer to catch error in operation

var dispatchGroup:DispatchGroup? = DispatchGroup(){
    didSet{
        if dispatchGroup == nil{
            // here you can do whetever after at least one of the two task fails
            print("error in FirestoreTask or realtimeTask")
        }
    }
}

// do your firestoreTask in this method
func dofirestoreTask (){
    // Implement your firestore task here //

    let taskResponse = true // Remove this variable with your firestore task response status
    if taskResponse == true{
        dispatchGroup?.leave()
    }else{
        dispatchGroup = nil
    }
}

func dorealtimeTask(){
    // Implement your realTimeTask here task here //
    let taskResponse = true // Remove this variable with your realTime task response status
    if taskResponse == true{
        dispatchGroup?.leave()
    }else{
        dispatchGroup = nil
    }
}

dispatchGroup?.enter()
dofirestoreTask()
dispatchGroup?.enter()
dorealtimeTask()

dispatchGroup?.notify(queue: .main) {
    // here you can do whetever after both tasks are successful
    print("Both Success")
}
0 голосов
/ 17 февраля 2020

Я думаю, что в iOS у вас есть только замыкания.

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