Обработка результата Facebook Graph API в iOS SDK с помощью Swift

Я просто хочу запросить данные из Graph API Facebook, например. получить основную информацию о текущем пользователе.

Документ Objective-C: https://developers.facebook.com/docs/ios/graph#userinfo

[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
  if (!error) {

    /* My question: How do I read the contents of "result" in Swift? */

    // Success! Include your code to handle the results here
    NSLog(@"user info: %@", result);
  } else {
    // An error occurred, we need to handle the error
    // See: https://developers.facebook.com/docs/ios/errors   
  }
}];

Документа по Swift еще нет, и я запутался в параметре «результат», тип которого — «id».


person Liron Shapira    schedule 15.06.2014    source источник


Ответы (3)


Похоже, что result содержит словарь, но это может быть nil. В Swift его тип будет отображаться как AnyObject?.

Итак, в Swift вы можете сделать что-то вроде:

// Cast result to optional dictionary type
let resultdict = result as? NSDictionary

if resultdict != nil {
    // Extract a value from the dictionary
    let idval = resultdict!["id"] as? String
    if idval != nil {
        println("the id is \(idval!)")
    }
}

Это можно немного упростить:

let resultdict = result as? NSDictionary
if let idvalue = resultdict?["id"] as? String {
    println("the id value is \(idvalue)")
}
person vacawama    schedule 15.06.2014
comment
Это сработало, спасибо! Я думаю, что теперь это единственный онлайн-документ FB SDK для тех, чей первый язык iOS — Swift. - person Liron Shapira; 15.06.2014

Просто помните, что это не словарь до конца, это комбинации словарей и массивов.

FBRequestConnection.startWithGraphPath("me?fields=feed", completionHandler: { (connection, result, error) -> Void in
                if( error == nil){

                    let fbGraphObject = result as FBGraphObject

                    let feed = fbGraphObject.objectForKey("feed") as NSMutableDictionary

                    let data = feed.objectForKey("data") as NSMutableArray

                    let postDescription = data[0].objectForKey("description") as String

                    //println( post )

                    self.fbu.initialUserFeed = feed
                    self.performSegueWithIdentifier("SelectStreams", sender: self)

                }else
                {
                    //TODO Allert to user that something went wrong
                    println(error)
                }

            })

меня это смущало в начале

person Lars Christoffersen    schedule 26.11.2014
comment
fbGraphObject не существует - person CularBytes; 09.07.2015

Это более простой способ:

    let params: [NSObject : AnyObject] = ["redirect": false, "height": 800, "width": 800, "type": "large"]
    let pictureRequest = FBSDKGraphRequest(graphPath: "me/picture", parameters: params, HTTPMethod: "GET")
    pictureRequest.startWithCompletionHandler({
        (connection, result, error: NSError!) -> Void in
        if error == nil {
            print("\(result)")


           let dictionary = result as? NSDictionary
           let data = dictionary?.objectForKey("data")
           let urlPic = (data?.objectForKey("url"))! as! String
           print(urlPic)



        } else {
            print("\(error)")
        }
    })

}
person Giovanny Piñeros    schedule 21.05.2016