Swift 3 从 Firebase 获取用户数据
Posted
技术标签:
【中文标题】Swift 3 从 Firebase 获取用户数据【英文标题】:Swift 3 Fetch User Data from Firebase 【发布时间】:2018-01-01 20:19:25 【问题描述】:我想将 Firebase 数据库中所有用户的名字提取到表格视图单元格中。当我执行我的代码时,它不起作用。 Firebase 有用户元组。在这个元组中,我存储了所有用户的 ID。在这些 id 中,我存储了个人信息元组。名字在此个人信息中。您可以在下图中看到我的 Firebase 快照。我的代码问题在哪里?谁能帮我 ? http://prntscr.com/huvdr9
//chatInfo.swift
class ChatInfo: UITableViewController
let cellId = "cellId"
var users = [User] ()
override func viewDidLoad()
super.viewDidLoad()
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Geri", style: .plain, target:self, action: #selector(handleCancel))
tableView.register(UserCell.self, forCellReuseIdentifier: cellId)
fetchUser()
func handleCancel()
dismiss(animated: true, completion: nil)
func fetchUser()
Database.database().reference().child("user").observe(.childAdded, with: (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]
let user = User()
user.userId = dictionary["firstname"] as! String
print(user.firstname)
self.users.append(user)
DispatchQueue.main.async(execute:
self.tableView.reloadData()
)
, withCancel: nil)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return users.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellId)
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
let user = users[indexPath.row]
cell.detailTextLabel?.text = user.firstname
cell.imageView?.image = UIImage(named: "mail")
return cell
class UserCell: UITableViewCell
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
required init?(coder aDecoder: NSCoder)
fatalError("not implemented")
//user.swift
class User: NSObject
var userId : String?
var latitude : Double?
var longitude : Double?
var firstname : String?
var email : String?
【问题讨论】:
【参考方案1】:您需要为在线用户添加一个孩子:
Database.database().reference().child("user").observe(.childAdded, with: (snapshot) in
改成这样:
Database.database().reference().child("user").child("personalInfo").observe(.childAdded, with: (snapshot) in
【讨论】:
以上是关于Swift 3 从 Firebase 获取用户数据的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3.1 - .setValuesForKeys和Firebase无法检索用户
使用 Swift 从带有条件的 Firebase 数据库中获取数据
在 Swift 3 中包含字典的 Firebase 进程子快照