I am new to Swift3 . Now, I'm try to do a .swift which can hold on some functions I needed.
For example : I want to get the userName as below , so I make a var to set value string in closure. Everything is okay and have value string before out of the closure , but value is disappear when it out of closure .. What happened !!?? Can someone tell me ? Plz .. Thank u so much T_T
Cold below here :
import UIKit
import FBSDKLoginKit
import FBSDKCoreKit
class CheckStatus: FBSDKLoginButton {
var userID: String = ""
var userName: String = ""
var userLink: String = ""
var userEmail: String = ""
var userPictureUrl: String = ""
func getUserDefault() {
guard FBSDKAccessToken.current() != nil else {
return
}
let userInfo: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, email, link, picture"])
userInfo.start(completionHandler: { (_, result, error) -> Void in
if error == nil {
self.readPermissions = ["email", "public_profile"] // FBSDKLoginButton's permission
guard let userDefault: [String:AnyObject] = result as? [String:AnyObject] else {
return
}
guard let userDefaultID: String = userDefault["id"] as? String else {
return
}
guard let userDefaultName: String = userDefault["name"] as? String else {
return
}
guard let userDefaultLink: String = userDefault["link"] as? String else {
return
}
guard let userDefaultEmail: String = userDefault["email"] as? String else {
return
}
guard let userDefaultPicture: [String:AnyObject] = userDefault["picture"] as? [String:AnyObject] else {
return
}
guard let userDefaultData: [String:AnyObject] = userDefaultPicture["data"] as? [String:AnyObject] else {
return
}
guard let userDefaultUrl: String = userDefaultData["url"] as? String else {
return
}
self.userID = userDefaultID
self.userName = userDefaultName
self.userLink = userDefaultLink
self.userEmail = userDefaultEmail
self.userPictureUrl = userDefaultUrl
print("----- User data below -----\nID: \(userDefaultID)\nName: \(userDefaultName)\nLink: \(userDefaultLink)\nEmail: \(userDefaultEmail)\nPicture: \(userDefaultUrl)\n ----------------------")
print("Have value : \(self.userName)") // This is work
}
})
print("No value : \(self.userName)") // No value !!
}
}