2016-10-03 2 views
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) 
         } 

        }) 

       } 
      } 
     } 

답변

1

으로 변환 한 후 다음과 같다.

if let fbDic = result as? [String: Any] { 
    dicLoginData["name"] = fbDic["name"] 
    //and so on 
} 

참고 : 스위프트 타자에서 당신은 대신 NSDictionary/NSArray의 스위프트의 일반적인 DictionaryArray 개체를 사용하는 경우.

+0

수정 된 답변을 확인하십시오 실수로 fbDic 대신'if let' 블록을 사용했습니다. –

관련 문제