你如何从数组中追加一个随机的USER?

时间:2017-02-01 16:26:21

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

我当然正在为我的项目使用Firebase。我有一堆“用户”的数据库,我已将所有用户以及他们的“用户名”返回到我的简单tableView中。我想知道,我如何从用户数组中选择一个随机用户,并在我的viewDidLoad中调用我的fetchUser()函数时附加一个用户?这是我的tableView代码和我的Firebase代码。任何帮助将受到高度赞赏。谢谢!

import UIKit

private let reuseIdentifier = "Cell"

class NewMessageController: UITableViewController {

    var users = [User]()

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.title = "Chat"

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: reuseIdentifier)

        fetchUser()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        setupViewWillAppear()
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return users.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath)

        let user = users[indexPath.row]
        cell.textLabel?.text = user.username

        return cell
    }
}

    func fetchUser() {

    let ref = FIRDatabase.database().reference().child("users")

    ref.observe(.childAdded, with: { (snapshot) in

        if let dictionary = snapshot.value as? [String: AnyObject] {

            let user = User()

            user.username = dictionary["username"] as? String
            user.profile_image_url = dictionary["profile_image_url"] as? String

            self.users.append(user)

            DispatchQueue.main.async {

                self.tableView.reloadData()
            }
        }

    }, withCancel: nil)
}

1 个答案:

答案 0 :(得分:1)

将它们全部加载到数组中,并生成0范围内的随机数。

indexUser = Int(arc4random_uniform(users.count))

然后更改fetchUsers()以返回单个用户,

return self.users[indexUser]

以下是您更改fetchUser

的方式
func fetchUser() -> User {

    let ref = FIRDatabase.database().reference().child("users")

    ref.observe(.childAdded, with: { (snapshot) in

        if let dictionary = snapshot.value as? [String: AnyObject] {

            let user = User()

            user.username = dictionary["username"] as? String
            user.profile_image_url = dictionary["profile_image_url"] as? String

            self.users.append(user)
        }

        if self.users.count > 0
        {
            // You now have an array of users, so pick one
            return  self.users[Int(arc4random_uniform(self.users.count))]
        }
        else
        {
            return nil
        }

    }, withCancel: nil)
}

如果您想继续在tableView中显示所有用户,则需要在拥有所选用户后重新加载表