我有一张桌子。内部有一个表格单元格。我希望我的客户出现在列表中。客户端列表来自Firebase数据库。
因此,我设置了表视图并定义了一个空的客户端数组
class ClientViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var clients = Array<Any>()
@IBOutlet weak var tableView: UITableView!
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "clientsCell", for: indexPath as IndexPath)
cell.textLabel?.text = clients[indexPath.row] as? String
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return clients.count
}
加载视图后,(我很确定是问题所在)我尝试通过数据库引用并将公司名称附加到空客户数组中
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var ref: DatabaseReference!
ref = Database.database().reference()
ref.child("clients").observeSingleEvent(of: .value, with: { (snapshot) in
for client in snapshot.children.allObjects as! [DataSnapshot] {
let company = client.childSnapshot(forPath: "company").value
self.clients.append(company ?? "No company name")
}
}) { (error) in
print(error.localizedDescription)
}
}
如果我对客户端数组进行硬编码,则效果很好。因此,我认为迭代是在表生成之后发生的。我怎样才能像我一样需要它?
答案 0 :(得分:0)
for循环后,重新加载表
for client in snapshot.children.allObjects as! [DataSnapshot] {
let company = client.childSnapshot(forPath: "company").value
self.clients.append(company ?? "No company name")
}
self.tableView.reloadData()
如果最终将转换为Any
,请避免输入String
var clients = [String]()