我想知道如何将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?
答案 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
中获得userID
和func showEmailAddress()
值后,您将全局声明username
和userID
。您可以在班级的任何位置使用这些值。
在DestViewController
声明两个属性id
和name
。您可以使用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
我希望这能够帮助其他人。再次感谢你们!