使用结果对象的 FBSDKGraphRequest 问题

Issue with FBSDKGraphRequest using the result object

我在使用 Facebook SDK 时遇到问题,(swift 4,Xcode 9) 在用户成功登录后,我试图撤回有关用户帐户的一些详细信息,例如他们的电子邮件地址、姓名和照片。

但是下面的代码在这一行给我一个编译器错误

if let email = result["email"] as? String

这是我遇到的错误。

Value of optional type 'Any?' not unwrapped; did you mean to use '!' or '?'?

这是包含获取用户个人资料信息的代码的完整函数。我已经尝试了多种可选的测试,使用'!'但都会导致编译器错误。

func fetchProfile() {
        print("in fetch profile")

        let parameters = ["fields": "email, first_name, last_name, picture.type(large)"]
        FBSDKGraphRequest(graphPath: "me", parameters: parameters).start { (connection, result, error) -> Void in

            print("In FBSDKGraphRequest")

            print(result)
            if error != nil {
                print(error as Any)
                return
            }

            if let email = result["email"] as? String
            {
                print(email)
            }
        }
    }

感谢任何帮助。

通常结果可以解释为 swift 字典 [String: Any]。因此,您可以尝试将结果转换为 [String: Any],然后尝试将电子邮件作为字符串。

if let result = result as? [String: Any] {
    if let email = result["email"] as? String {
         print(email)
    }
}