使用在另一个 Swift VC 文件中创建的对象?

Posted

技术标签:

【中文标题】使用在另一个 Swift VC 文件中创建的对象?【英文标题】:Use an object created in another Swift VC file? 【发布时间】:2015-07-15 19:14:50 【问题描述】:

我正在创建一个应用并使用 Firebase 进行后端和用户身份验证。我在登录屏幕的视图控制器中完成了登录过程。这样做之后,在该 VC 中创建 authData 对象,并且 authData 对象包含一个 UID(用户 ID)字段。我想在另一个 VC 中引用同一对象的 uid 字段,在其中我通过附加在 FirebaseFramework.m 文件中创建的 myRootRef 变量来更改根数据库 url。本质上,我希望能够在另一个 VC 中使用和引用在一个 VC 中创建的对象。我该怎么做?

在登录VC中:

    @IBAction func LoginTapped(sender: UIButton) 
    var email:NSString = txtEmail.text as NSString
    var password:NSString = txtPassword.text as NSString

    if ( email.isEqualToString("") || password.isEqualToString("") ) 

        var alertView:UIAlertView = UIAlertView()
        alertView.title = "Sign in Failed!"
        alertView.message = "Please enter Email and Password"
        alertView.delegate = self
        alertView.addButtonWithTitle("OK")
        alertView.show()
     else 

        myRootRef.authUser(email as String, password: password as String)
            error, authData in
            if error != nil 
                var alertView:UIAlertView = UIAlertView()
                alertView.title = "Sign in Failed!"
                alertView.message = "Incorrect email or password"
                alertView.delegate = self
                alertView.addButtonWithTitle("OK")
                alertView.show()
             else 
              println(authData.uid)

            
        
    


在其他 VC 中:

@IBAction func SubmitTapped(sender: AnyObject)    

    var UserRef = myRootRef.childByAppendingPath(authData.uid)
    UserRef.setValue(item)


在另一个 VC 中,无法识别“authData.uid”,尽管它是在登录 VC 中创建的。

【问题讨论】:

Accessing variables from another ViewController in Swift的可能重复 【参考方案1】:

您需要使用segue。您可以在情节提要中连接一个 segue,给它一个标识符,然后从代码中触发它。

Ray Wenderlich.com 有一篇很棒的文章。

您可以从代码中调用performSegueWithIdentifier 方法。这将触发一个转场。从那里您可以在prepareForSegue 控制器方法中“拦截”segue。在此方法中,您可以填充目标视图控制器的属性。

当用户通过 Firebase 应用的身份验证时,authData 属性包含当前用户。使用该属性,您可以填充下一个视图控制器。

let ref = Firebase(url: "<my-firebase-app>")

@IBAction func loginDidTouch(sender: AnyObject?) 
  ref.authUser("email", "password")  (error, authData) in
    self.performSegueWithIdentifier("MyIdentifier", sender: nil)
  


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
  if segue.identifier == "MyIdentifier" 
    let vc = segue.destinationViewController as! MyNextViewController
    vc.authData = ref.authData
  

【讨论】:

以上是关于使用在另一个 Swift VC 文件中创建的对象?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 在代码中创建的中心 UILabel

在另一个活动中创建的对象在主活动中不可见

C#winform中为啥一个窗体的对象可以调用在另一个窗体中创建的一个类未实例化下

如何在dojo工具包的Current JS文件中使用在另一个JS文件中创建的Dialog变量

Perl - 如何使用在另一个 Perl 脚本的模块中创建的进程句柄

使用在另一个Class的main方法中创建的实例