1
스위프트 2.2 및 iOS 9까지 완벽하게 작동하지만 Swift 3.0에서 변경 한 후에는 이름, 이메일 및 fbid를 얻을 수 없습니다. 결과가 나오기 때문에 결과에서 데이터를 추출 할 수 없기 때문입니다. 내 코드 [String: Any]
에 result
개체의 유형을 지정하는 대신 result["name"]
같은 Dictionary
와 빠른 사용 첨자에 value(forKey:)
및 setValue(_:forKey)
를 사용하므로이 같은 변경 사항을 신속 3.0iOS에서 FBGraphApi 결과에서 데이터를 추출하는 방법 10
func signInWithFB(_ forVC:UIViewController , sucess:@escaping signInSuccessBlock , falure:@escaping SignInFailureBlock)
{
let obj_facebook = FBSDKLoginManager()
obj_facebook.loginBehavior = .native
obj_facebook.logIn(withReadPermissions: ["public_profile","email","user_friends"], from: forVC) { (result:FBSDKLoginManagerLoginResult?, error:Error?) -> Void in
if ((error) != nil)
{
falure(error as NSError?, false)
}
else if ((result?.isCancelled) == true)
{
falure(nil, true)
}
else
{
let dicLoginData = NSMutableDictionary()
let request = FBSDKGraphRequest(graphPath: "/me?fields=name,email,gender,hometown,education,location,first_name,last_name", parameters: nil)
let _ =
request?.start(completionHandler: { (Connection:FBSDKGraphRequestConnection?, result:Any!, error:Error?) -> Void in
if error == nil
{
dicLoginData.setValue((result as AnyObject).value(forKey: "name"), forKey: "name")
dicLoginData.setValue((result as AnyObject).value(forKey: "email"), forKey: "email")
dicLoginData.setValue((result as AnyObject).value(forKey: "gender"), forKey: "Gender")
dicLoginData.setValue((result as AnyObject).value(forKey: "last_name"), forKey: "lname")
dicLoginData.setValue((result as AnyObject).value(forKey: "first_name"), forKey: "fname")
let faceBookID:String = (result as AnyObject).value(forKey: "id") as! String
let proPicUrl = String(format:"https://graph.facebook.com/%@/picture?type=large", faceBookID)
dicLoginData.setValue(faceBookID, forKey: "facebookId")
dicLoginData.setValue(proPicUrl, forKey: "proPicURL")
// dicLoginData.setValue(strLoaction?.first, forKey: "City")
sucess(dicLoginData)
}
else
{
falure(error as NSError?, false)
}
})
}
}
}
수정 된 답변을 확인하십시오 실수로 fbDic 대신'if let' 블록을 사용했습니다. –