首页 > 解决方案 > 如何从 Facebook Graph API 的 GraphResponseProtocol 访问数据

问题描述

我对 swift 很陌生,我现在正在研究 Facebook graph api。我无法访问来自图形请求的数据。

struct MyProfileRequest: GraphRequestProtocol {
    struct Response: GraphResponseProtocol {

        init(rawResponse: Any?) {

            // Decode JSON from rawResponse into other properties here.
            let json = JSON(rawResponse!)
            let userDef : [String : String] = [
                "username" : json["name"].stringValue,
                "lastname" : json["last_name"].stringValue, 
                "shortname" : json["short_name"].stringValue, 
                "name_format" : json["name_format"].stringValue
            ]
        }
    }

    var graphPath = "/me"
    var parameters: [String : Any]? = [ "fields": "id, name, last_name, name_format, short_name"]
    var accessToken = AccessToken.current
    var httpMethod: GraphRequestHTTPMethod = .GET
    var apiVersion: GraphAPIVersion = .defaultVersion
}

我需要访问此块之外的“userDef”字典。

标签: iosswiftfacebookfacebook-graph-api

解决方案


这很简单只需检查此示例代码

struct MyProfileRequest: GraphRequestProtocol {
    struct Response: GraphResponseProtocol {
        var name:String?
        var email:String?
        var id:String?
        init(rawResponse: Any?) {
            print(rawResponse)
            // Decode JSON from rawResponse into other properties here.
            if let response = rawResponse as? [String:Any] {
                name = (response["name"] as? String) ?? ""
                email = (response["email"] as? String) ?? ""
                id = (response["id"] as? String) ?? ""
            }
        }
    }

    var graphPath = "/me"
    var parameters: [String : Any]? = ["fields": "id, name,email"]
    var accessToken = AccessToken.current
    var httpMethod: GraphRequestHTTPMethod = .GET
    var apiVersion: GraphAPIVersion = .defaultVersion


}

如何访问 nameemail以及id

    MyProfileRequest().start {[unowned self]  (req, result) in
        switch result {
        case .success(let values): // Here is your values

            print("Custom Graph Request Succeeded: \(values)")
            print(values.name)

        case .failed(let error):
            print("Custom Graph Request Failed: \(error)")
        }
    }

推荐阅读