開発者のドキュメントページ( 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()
誰かが助けてくれますか?
私は同じ行動をしました。私は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)
}
}
最後の答えを改善しました。 「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
}
}
}