Имя пользователя не выводится — Firebase, Swift

# #swift #firebase-realtime-database #firebase-authentication

Вопрос:

Я попытался создать экран, на котором выводится метка имени пользователя пользователя. Это код, который я написал:

 //  ViewController.swift

import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
import SwiftUI

class HomeViewController: UIViewController {

  override func viewDidLoad()
  {
    
          super.viewDidLoad()
          guard let uid = Auth.auth().currentUser?.uid else { return  }
          guard (Auth.auth().currentUser?.uid) != nil else {return}
           Database.database().reference().child("users").child(uid).child("username").observeSingleEvent(of: .value){ (snapshot) in
            guard let username = snapshot.value as? String else {return}
            let label = UILabel(frame: CGRect(origin: .zero, size: CGSize(width: 100, height: 100)))
            label.center = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.midY)
            label.textAlignment = NSTextAlignment.center
            label.text = username
            self.view.addSubview(label)
       }
   }
}
 

Однако текст возвращается как ничто. Есть ли что-то, что я делаю неправильно или упускаю из виду? Когда я удаляю части кода firebase и просто добавляю случайный фрагмент текста вместо «имя пользователя», тогда появится надпись с этим текстом, поэтому я предполагаю, что с кодом firebase что-то не так.

Комментарии:

1. С этим кодом есть много основных проблем: во-первых, этот код использует UIKit, а не SwiftUI. Во-вторых, все операции пользовательского интерфейса должны выполняться в основном потоке, поэтому oyu должен переносить строки между let label... до конца обратного вызова в основной поток с DispatchQueue.main.asynch { ... } помощью блока. Наконец, вам необходимо выполнить отладку, если проблема связана с меткой или guard let username = snapshot.value as? String else {return} завершается ли оператор, и в этом случае вам нужно понять, почему ничего не возвращается, а не почему метка не установлена

2. № 1. Узнайте, для чего viewDidLoad . № 2. Запустите поиск асинхронного процесса. № 3. Используйте основной поток при работе с пользовательским интерфейсом, как предлагает Кирилл С.