Согласно вашему комментарию вы получаете сбой на линии
let nameTxtField = cell.viewWithTag(1) as! UILabel
Это означает, что viewWithTag(1)
либо возвращает nil
, либо что-то отличное от UILabel
.Либо вы не установили для тега метки значение 1, либо у вас есть несколько элементов пользовательского интерфейса с тегом 1 (viewWithTag
вернет первое представление в иерархии с этим тегом).
Необходимо создатьсоответствующий UITableViewCell
подкласс и свяжите ваш UILabel
со свойством этого класса.Тогда вы можете сказать что-то вроде:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyTableViewCell
cell.nameTxtField.text = users[indexPath.row].name
Пара других комментариев;Вы должны попытаться устранить как можно больше!насколько это возможно.
- Свойства вашей структуры должны быть опциональными или неопциональными, а не неявно развернутыми опциональными.
struct User {
let name: String
let uid: String
}
- Вы должны получить
uid
с оператором guard
вместо принудительной распаковки позже - Ваш код для получения пользователя будет более понятным, если вы распределите его на несколько строк
- Избегайте использования
NS...
объекты в Swift - Я также принимаю к сведению ответ Фрэнка относительно вашего доступа к Firebase, но я не знаю достаточно о Firebase, чтобы знать, является ли это проблемой или нет;
override func viewDidLoad() {
super.viewDidLoad()
guard let uid = Auth.auth().currentUser?.uid else {
return
}
let ref: DatabaseReference! = Database.database().reference()
ref.child("users").child(uid).queryOrderedByKey().observe(.childAdded) { (snapshot) in
guard let result = snapshot.value as? [String:Any] else {
return
}
let name = (result["name"] as? String) ?? ""
let uid = (result["uid"] as? String) ?? ""
self.users.append(User(name: name, uid: uid))
self.tableView.reloadData()
}
}