是否可以将标签栏控制器 class 中从 Firebase 检索到的数据从标签栏控制器传输到视图控制器? Xcode、Swift

Is it possible to transfer data retrieved from Firebase in the tab bar controller class from the tab bar controller to a view controller? Xcode, Swift

因此,我想在用户从登录页面移动到主页时预取与选项卡栏控制器关联的视图控制器中所需的一些数据(这两个视图控制器之间存在选项卡栏控制器)。我正在自定义 TabBarController class 中获取数据并使用以下代码发送它(不起作用):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
    if segue.destination is Profile { // Profile = one of the view controllers in the tab bar
            let vc = segue.destination as? Profile
            vc?.uid = self.userID
            vc?.name = self.name
            vc?.skills = self.skillSet
    }
    
}

最好的方法是什么?请注意,我无法在标签栏控制器之前预取数据,因为那是登录页面。如果我在主页(标签栏控制器 {home, search, profile})上预取配置文件页面数据,我如何将它传输到同一标签栏中的另一个视图控制器(到配置文件)?

最好的方法是什么?

  • 我相信一旦您执行登录调用(在登录屏幕内),您将拥有与该用户相关的用户 ID 和其他数据,因此在登录控制器内您添加了用于将 Tabbar 控制器作为初始控制器的代码。

  • 所以基于此最好的办法是将 userData 存储到标签栏控制器

  • 因此,一旦您将数据存储到标签栏控制器(从登录或主屏幕)中,您就可以在标签栏内的任何根控制器(主页、搜索、个人资料)中获取用户数据,如下所示代码。

struct User { var userID: String? }

class TabbarController: UITabBarController {
    var userData: User
}

class HomeController: UIViewController {
 var userData: User?
   override func viewWillAppear(_ animated: Bool) {
       if let tabBar =  self.tabBarController as? TabbarController {
        self.userData = tabBar.userData
       }
   }
}

您可以通过多种方式实现这一目标。

  1. 使用SuperViewController,
  2. 如果您想在 TabbarViewVontroller 子程序以外的地方访问,请使用 SingleTone classclass。
  3. 如果数据较小,则保存在常量中等常用位置。
  4. 在一个 VC 中预取数据,例如主页,然后在单击时传递到所需的 VC。