我想知道如何将结果中的值传递给另一个视图控制器。

时间:2017-06-28 04:27:13

标签: ios swift xcode

我想知道如何将result中的值传递给另一个视图控制器。

func showEmailAddress() -> Void{
    //Adding user to firebase
    let accessToken = FBSDKAccessToken.current()
    guard let accessTokenString = accessToken?.tokenString else //This makes things a littie safer
    {return}

    let credentials = FacebookAuthProvider.credential(withAccessToken: accessTokenString)

    Auth.auth().signIn(with: credentials) { (user, error) in
        if error != nil {
            print("something went wrong with out FB user: ", error ?? "")
            return
        }
        print("Successfully logged in with our user: ", user ?? "")

        UserDefaults.standard.set(user!.email!, forKey: "usersigned")
        UserDefaults.standard.synchronize()

        let delegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate

        delegate.rememberLogin()
    }
    //print("Succesfully loged in with facebook...")
    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { (connection, result, err) in
        //print(123)
        if err != nil{
            print("Failed to start graph request:",err ?? "")
            return
        }
        print("This is the results")
        print(result ?? "")

     let data:[String:AnyObject] = result as! [String : AnyObject]; print(data["name"]!); print(data["id"]!)

        var username = data["name"]!
        var userID = data["id"]!
        //let number = "1234566"
    }
}

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let DestViewController : menuViewController = segue.destination as! menuViewController
    DestViewController.id = username
}

这些值仅存在于showEmailAddress()中。有没有办法从函数中提取它们以将用户名和用户ID发送到另一个VC?

4 个答案:

答案 0 :(得分:0)

我希望这个答案会有所帮助,因为我不确定你想要传递给另一个ViewController的showEmailAddress()函数中的哪些特定变量。我假设它是电子邮件变量,但我不确定这个变量不需要传递给下一个ViewController,因为这个ViewController可以简单地从UserDefaults中检索这个值。

无论如何,假设您希望传递电子邮件变量(并且无法从UserDefaults检索此变量),我的建议是首先使电子邮件变量成为源控制器类的属性,以便可以在showEmailAddress()函数()

showEmailAddress()将设置此属性。

您还可以在目标控制器上为该电子邮件创建一个属性。 在准备segue方法时,您可以按照与分配用户名类似的方式设置此电子邮件属性。例如

DestViewController.id = username
DestViewController.email = self.email!

答案 1 :(得分:0)

您可以选择在班级中全球声明var username ,var userID。在username中获得userIDfunc showEmailAddress()值后,您将全局声明usernameuserID。您可以在班级的任何位置使用这些值。

DestViewController声明两个属性idname。您可以使用prepareForSegue:方法访问这两个属性,并将@Tom所解释的全局定义数据传递为

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let DestViewController : menuViewController = segue.destination as! menuViewController
    DestViewController.id = self.userID!
    DestViewController.name= self.username !
}

希望它有所帮助。快乐编码!!

答案 2 :(得分:0)

在AppDelegate中创建字符串变量

var username = String()
var userid = String()

并且您获得用户名和userid的值将其值发送到AppDelegate。制作AppDelgate对象如下

let appDelegate = UIApplication.shared.delegate as! AppDelegate

将值传递给app委托变量

self.appDelegate.username = "your Value"
self.appDelegate.userid = "your Value"

并获取您想要获取的值,如下所示

let  string = appDelegate.username as! String
let  string1 = appDelegate.userid as! String

传递的值

答案 3 :(得分:0)

非常感谢你们!你们有很多帮助!我结束了iOS极客方法,它完美地工作。我只需要更新一些语法。

 let delegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate

        delegate.userName = username
        delegate.userid = userID

并获取所需VC中的值

var myDelegate = UIApplication.shared.delegate as! AppDelegate

无论价值需要在哪里,我都只使用

let id = myDelegate.userid

我希望这能够帮助其他人。再次感谢你们!