I\'m trying to create a basic following algorithm using Swift and Firebase. My current implementation is the following:
static func follow(user: FIRUser, use
Thanks to Frank, I figured out a solution using runTransactionBlock
. Here it is:
static func follow(user: FIRUser, userToFollow: FIRUser) {
self.database.child("users/"+(user.uid)+"/Following").runTransactionBlock({ (currentData: FIRMutableData!) -> FIRTransactionResult in
var value = currentData?.value as? Array<String>
if (value == nil) {
value = [userToFollow.uid]
} else {
if !(value!.contains(userToFollow.uid)) {
value!.append(userToFollow.uid)
}
}
currentData.value = value!
return FIRTransactionResult.successWithValue(currentData)
}) { (error, committed, snapshot) in
if let error = error {
print("follow - update following transaction - EXCEPTION: " + error.localizedDescription)
}
}
}
This adds the uid of userToFollow
to the array Following
of user
. It can handle nil values and will initialize accordingly, as well as will disregard the request if the user is already following the uid of userToFollow
. Let me know if you have any questions!
Some useful links:
- The comments of firebase runTransactionBlock
- The answer to Upvote/Downvote system within Swift via Firebase
- The second link I posted above