Синхронизированный массив (для лайков / подписчиков) Best Practice [Firebase Swift]

Я пытаюсь создать базовый следующий алгоритм, используя Swift и Firebase. Моя текущая реализация заключается в следующем:

static func follow(user: FIRUser, userToFollow: FIRUser) {
    database.child("users").child(user.uid).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
        var dbFollowing: NSMutableArray! = snapshot.value!["Following"] as! NSMutableArray!
        dbFollowing?.addObject(userToFollow.uid)
        self.database.child("users/"+(user.uid)+"/").updateChildValues(["Following":dbFollowing!])
        //add user uid to userToFollows followers array in similar way
    }) { (error) in
        print("follow - data could not be retrieved - EXCEPTION: " + error.localizedDescription)
    }
}

Это извлекает массив из узла FirebaseFollowing, добавляет идентификаторuserToFollowи отправляет новый массив на узелFollowing, Это имеет несколько проблем:

Он не синхронизирован, поэтому, если он вызывается одновременно на двух устройствах, один массив перезапишет другой, и подписчики не будут сохранены.Если нет последователей, которые он не может обработать с нулевым массивом, программа завершится сбоем (не главная проблема, я, вероятно, могу решить с дополнительными).

Мне было интересно, как лучше всего создать синхронизированный массив uid / токенов для подписчиков пользователей или лайков. Я нашел следующие ссылки, но, похоже, ни одна из них не имеет непосредственного отношения к моей проблеме и не несет с собой других проблем. Я подумал, что было бы разумно попросить сообщество с опытом, а не Франкенштейном, найти кучу решений вместе.

https://firebase.googleblog.com/2014/05/handling-synchronized-arrays-with-real.html https://firebase.google.com/docs/database/ios/save-data (сохранить данные как раздел транзакции)

Спасибо за вашу помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос