2016-09-08 33 views
10

'daki FBSDKGraphRequest yanıt verileri nasıl işlenir FB en son SDK'yı (hızlı olmayan) entegre ettim ve oturum açma gayet iyi çalışıyor.Swift 3

Login button clicked 
Optional({ 
    "first_name" = KD; 
    id = 10154CXXX; 
    picture =  { 
     data =   { 
      "is_silhouette" = 0; 
      url = "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/XXXn.jpg?oh=a75a5c1b868fa63XXX146A"; 
     }; 
    }; 
}) 

Peki formatı i dönüştürmek olmalıdır: çıkışı ile

 func configureFacebook() 
     { 
      login.readPermissions = ["public_profile", "email", "user_friends"]; 
      login.delegate = self 
     } 


func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
    print("Login buttoon clicked") 
    let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"first_name,email, picture.type(large)"]) 

    graphRequest.start(completionHandler: { (connection, result, error) -> Void in 

     if ((error) != nil) 
     { 
      // Process error 
      print("Error: \(error)") 
     } 
     else 
     { 
      print(result) 

     } 
    }) 
} 

: i onun geçerli bir JSON

Çalışma kod beri Grafik yanıt verilerini ayrıştırmak nasıl bilmek gerekir Tüm URL veya first_name vb. değerleri almak için yukarıdaki verilerden yararlanın.

Ayrıca, NSDictionary öğesine dönüştüm ve hatayı aldım:

01 aşağıdaki gibi
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
     print("Login buttoon clicked") 
     let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"first_name,email, picture.type(large)"]) 

     graphRequest.start(completionHandler: { (connection, result, error) -> Void in 

      if ((error) != nil) 
      { 
       print("Error: \(error)") 
      } 
      else 
      { 
       do { 

       let fbResult = try JSONSerialization.jsonObject(with: result as! Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary 
       print(fbResult.value(forKey: "name")) 


       } catch { 
        print(error) 
       } 

      } 
     }) 
    } 

cevap

17

Sen yap basitçe yapabilirsiniz: 3

let data:[String:AnyObject] = result as! [String : AnyObject] 
print(data["first_name"]!) 

Swift:

Güvenli yerine Bu en basit gibi görünüyor AnyObject

if let data = result as? [String:Any] { 

} 
+4

ait & Any unwrapping. Benim için son kod. veri ver: [String: AnyObject] = sonuç olarak! [String: AnyObject] let urlData = data ["picture"] ?. değeri (forKey: "data") olarak! [String: AnyObject] let url = urlData ["url"]! –

+0

Daha önce olduğu gibi erişim profil resmini denedim, ancak şu anda info olsa da nil döndü: 'profilePictureURLStr = data [" picture.data.url "] olarak? String'. Ters giden birşey mi var. –

+0

SwiftyJSON kullanıyor musunuz? –