【问题标题】:Fetching user's data from firebase?从firebase获取用户数据?
【发布时间】:2017-01-24 16:08:05
【问题描述】:

目前我正在以这种方式显示用户的联系人

 ref.observe(.value, with: { snapshot in



        var newItems: [Contacts] = []

        for item in snapshot.children {
            let contact = Contacts(snapshot: item as! FIRDataSnapshot)
            newItems.append(contact)
        }

        // filter the data here
        let userID = FIRAuth.auth()?.currentUser?.email

        let itemsMatching  = self.items.filter {
            $0.addedByUser == userID
        }




        self.items = newItems
        let sortedNames = itemsMatching.sorted { $0.lastName < $1.lastName }
        self.tableView.reloadData()

    })

如何仅显示与 addedByUser 列中具有相同电子邮件的用户? 当您创建新联系人时,它会自动将您的电子邮件值分配给 addedByUser。 因此,例如,如果我从帐户 show@mycontact.com 添加联系人,它将仅显示具有附加值的联系人:“show@mycontact”

【问题讨论】:

    标签: ios swift firebase swift3 firebase-realtime-database


    【解决方案1】:

    更新的答案 - 有两个选项:-)

        let ref = FIRDatabase.database().reference(withPath: "contacts")
    
        var newItems : [ContactItem] = []
    
        ref.observe(.value, with: { snapshot in
    
            for item in snapshot.children
            {
                let item = ContactItem(snapshot: item as! FIRDataSnapshot)
                newItems.append(item)
            }
    
            let userID = FIRAuth.auth()?currentUser?.email
    
            let itemsMatching  = newItems.filter
            {
                $0.addedByUser == userID
            }
    
            let sortedNames = itemsMatching.sorted { $0.lastName < $1.lastName }
    
            print(sortedNames)
        })
    

    另一方面,鉴于您无论如何都在迭代快照,您总是可以选择简单的方法

        let ref = FIRDatabase.database().reference(withPath: "contacts")
    
        var newItems : [ContactItem] = []
        let userID = FIRAuth.auth()?currentUser?.email
    
        ref.observe(.value, with: { snapshot in
    
            for item in snapshot.children
            {
                let item = ContactItem(snapshot: item as! FIRDataSnapshot)
                if item.addedByUser == userID
                {
                    newItems.append(item)
                }
            }
    
            let sortedNames = newItems.sorted { $0.lastName < $1.lastName }
    
            print(sortedNames)
        })
    

    【讨论】:

    • 多么奇怪。当然对我有用。愚蠢的问题 - 但您能否确认您在 $0 上确实有一个字段 addedByUser,当然您已将 self.myEmailAddress 更改为您自己的变量?
    • 我发布了编辑后的代码.. 并尝试打印用户 ID 并打印当前用户邮件@Russell
    猜你喜欢
    • 2020-11-05
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2019-09-18
    • 2021-02-09
    • 2023-03-19
    相关资源
    最近更新 更多