2017-03-27 51 views
0

我正在试图制作Twitter克隆。我的后端是Firebase,我有Twitter登录。将数据传递给标签栏

我设法实现Twitter登录,但现在不知道如何将当前用户uid传递给所有标签栏视图控制器。

现在我的用户模型只有id(字符串类型)和posts(Post数组)。

class User { 

    // MARK: Properties 
    let id: String! 
    var posts: [Post]? 

    init(id: String) { 
     self.id = id 
    } 

} 

这是用户登录我LoginViewController一部分,现在我必须初始化

// Checks if user is already logged in and transfers them to feed 
FIRAuth.auth()?.addStateDidChangeListener() { (auth, user) in 
     if user != nil { 
      self.performSegue(withIdentifier: "Login", sender: self) 
     }  
} 

我已创建自定义的控制器标签栏只有一个用户属性新的对象:用户?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "Login" { 
     let intializeUser = User(id: (FIRAuth.auth()?.currentUser?.uid)!) 
     let tabBar = TabBarViewController() 
     tabBar.user = intializeUser 
    } 
} 

但这不起作用。有人可以解释如何优雅地存储用户uid,然后与其他所有视图控制器一起使用吗?

+0

尝试'让tabBar = TabBarViewController()as! customTabBarController' –

回答

0

传递给函数参数准备 - segue: UIStoryboardSegue包含您的目标(UITabBarController) - 如果你的故事板中正确设置它。

所以实际上你必须做的,而不是初始化一个新的对象是什么,是简单地从segue对象得到它:

let tabBar = segue.destinationViewController as! TabBarController 

这将使你的代码工作。

有一个关于您的应用程序体系结构的全新故事 - 无论是MVC还是MVVM,MVP还是VIPER。这与你的关于优雅存储用户ID的问题有关。我不能直接给你回答,因为它主要是基于意见的。自己尝试一下,找到合适的抽象级别。

对于一些参考,here是我的OSS项目,我封装,用于其他视图控制器使用提供了接口的对象火力地堡互动。但是,再次 - 如果你从iOS和/或一般编程开始,也许这不是开始时最好的首选体系结构。