web-dev-qa-db-ja.com

Swift 5を使用したFacebookグラフリクエスト

開発者のドキュメントページ( https://developers.facebook.com/docs/Swift/graph )に記載されているとおりに、facebookグラフリクエストを実装しようとしています。 Xcode 10.2.1、Swift 5。

しかし、次のエラーが発生し続けます。

コンテキストクロージャタイプ '(GraphRequestConnection ?, Any ?, Error?)-> Void'には3つの引数が必要ですが、クロージャ本体で2つ使用されました

私は多くの調査を行い、いくつかの引数を入力しようとしましたが、不足している3番目の引数が何であるかを理解できません。

import FBSDKCoreKit

let connection = GraphRequestConnection()
connection.add(GraphRequest(graphPath: "/me")) { httpResponse, result in
    switch result {
        case .success(let response):
        print ("Graph Request succeeded: \(resonse)")

        case .failed (let error):
            print ("Graph Request failed: \(error)")
    }
}
connection.start()

誰かが助けてくれますか?

10
Franz

私は同じ行動をしました。私はSwiftとFacebook Graph APIで経験したことがありません。それが良い解決策であるかどうかはわかりませんが、現在(より良い解決策が見つかるまで)、私にとってはうまくいきます:

connection.add(GraphRequest(graphPath: "/me", parameters: ["fields":"email"])) { httpResponse, result, error   in
    if error != nil {
        NSLog(error.debugDescription)
        return
    }

    // Handle vars
    if let result = result as? [String:String],
        let email: String = result["email"],
        let fbId: String = result["id"] {

        // internal usage of the email
        self.userService.loginWithFacebookMail(facebookMail: email)

    }

}
13
Sebastian Fox

最後の答えを改善しました。 「location {location {country_code}}」などのパラメータをリクエストしている場合は、1つ以上のレベルのjsonがあります。このため、結果を[String:Any]にキャストする必要があります。キャストしないとnilになるためです。

connection.add(GraphRequest(graphPath: "/me", parameters: ["fields":"email,location{location{country_code}}"])) { httpResponse, result, error   in
    if error != nil {
        NSLog(error.debugDescription)
        return
    }

    if let result = result as? [String:Any],
     let email = result["email"] as? String {
        if let location_data = result["location"] as? [String: Any],
         let location = location_data["location"] as? [String: Any],
         let countryCode = location["country_code"] as? String {
            country = countryCode
        }
     }
}
0
Mauro Gesuitti