Как получить ключи комментария / поста - PullRequest
0 голосов
/ 06 октября 2019

Я с трудом пытаюсь получить и postId, и commentId одновременно.

Цель состоит в том, чтобы позволить пользователю удалить свой комментарий к сообщению.

Вот структура комментариев, ниже приведена функция, которая должна удалять комментарии пользователей, однако по какой-то причине я могу вернуть только commentId, а не postId. Таким образом, комментарий не удаляется при нажатии.

PostId будет = nil, если я выполню точку останова в окончательном варианте, подобном deleteComment, но если я выполню точку останова в последней строке func fetchComment, postId вернет то, для чего используется postIdпост.


struct Comment {
    var commentId: String!
    let user: User
    var creationDate: Date!
    let text: String
    let uid: String!

    init(commentId: String!,user: User, dictionary: [String: Any]) {
        self.commentId = commentId
        self.user = user
        self.text = dictionary["text"] as? String ?? ""
        self.uid = dictionary["uid"] as? String ?? ""

        if let creationDate = dictionary["creationDate"] as? Double {
            self.creationDate = Date(timeIntervalSince1970: creationDate)
        }

    }

    var post: Post?


    func deleteComment() {

        guard let postId = self.post?.postId else { return }
        guard let commentId = self.commentId else { return }

     let commentsRef = Database.database().reference().child("comments")
        commentsRef.child(postId).child(commentId).removeValue()




    }

Вот как извлекаются комментарии



    var comments = [Comment]()


    func fetchComments() {
        guard let postId = self.post?.postId else { return }
        let ref = Database.database().reference().child("comments").child(postId)
        ref.observe(.childAdded, with: { (snapshot) in

            let commentId = snapshot.key
            //print(commentId)
            guard let dictionary = snapshot.value as? [String: Any] else { return }
            guard let uid = dictionary["uid"] as? String else { return }
            Database.fetchUserWithUID(with: uid, completion: { (user) in
                let comment = Comment(commentId: commentId, user: user, dictionary: dictionary)

                self.comments.append(comment)
                self.collectionView?.reloadData()
            })


        }) { (err) in
            print("Failed to observe comments")
        }

    }

Также вот код, когда пользователи отправляют комментарии


 func didSubmit(for comment: String) {

        guard let uid = Auth.auth().currentUser?.uid else { return }

        print("post id:", self.post?.postId ?? "")

        print("Inserting comment:", comment)


        let postId = self.post?.postId ?? ""
        let values = ["text": comment, "creationDate": Date().timeIntervalSince1970, "uid": uid] as [String : Any]

        Database.database().reference().child("comments").child(postId).childByAutoId().updateChildValues(values) { (err, ref) in

            if let err = err {
                print("Failed to insert comment:", err)
                return
            }

            self.uploadCommentNotificationToServer()

            if comment.contains("@") {
                self.uploadMentionNotification(forPostId: postId, withText: comment, isForComment: true)
            }

            self.containerView.clearCommentTextView()
        }

        }

Json для комментариевчерез пожарную базу

  "comments" : {
    "-Lord0UWPkh5YdGIHtAO" : {
      "-Lp7AQzHccme5RcRsyDd" : {
        "creationDate" : 1.568874020882821E9,
        "text" : "Wow Cool!",
        "uid" : "wELwYnMGxxW0LJNRKBuuE2BUaV93"
      }
    },
    "-LowvCk-agvJbK0VF-Bq" : {
      "-LpKm1NcgOsXhwj6soxE" : {
        "creationDate" : 1.569102243436777E9,
        "text" : "Nice!",
        "uid" : "wELwYnMGxxW0LJNRKBuuE2BUaV93"
      },

1 Ответ

2 голосов
/ 07 октября 2019

Один из вариантов - сделать postId свойством в структуре Comment и добавить его в метод init. Таким образом, вы всегда будете иметь к нему доступ

struct Comment {
    let postId: String
    var commentId: String!
    let user: User
    var creationDate: Date!
    let text: String
    let uid: String!

init(commentId: String!,user: User, postIdentifier: String, dictionary: [String: Any]) {
    self.commentId = commentId
    self.user = user
    self.postId = postIdentifier
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...