"Any?"类型没有下标成员。

6

我正在尝试在我的应用程序中使用fb登录后检索电子邮件ID。但是,当我尝试从结果中获取值时,会出现错误。

错误信息为:Type 'Any?' has no subscript members

func fetchProfile()
{
    print("Fetch Profile")
    let parameters = ["fields": "email, first_name, last_name,  picture.type(large)"]
    FBSDKGraphRequest(graphPath: "me", parameters: parameters).start { (connection, result, error) in

        let email = result["email"] as? String  //Type 'Any?' has no subscript members error occurs here.
    }
}

这可能会有所帮助:https://dev59.com/31kS5IYBdhLWcg3wu4vL#39516303 - Bista
2个回答

12

更改这个

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

进入

  guard let resultNew = result as? [String:Any] 

 let email = resultNew["email"]  as! String

完整回答

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

        guard let resultNew = result as? [String:Any] 

       let email = resultNew["email"]  as! String
    }

@Vyshakh - 哪一行? - Anbu.Karthik
更新的注释 - Vyshakh
这里得到的结果是resultNew - Anbu.Karthik
@Vyshakh - 在这个地方使用 [String:[Any]] 或者使用这个 [String:Any]。 - Anbu.Karthik
让我们在聊天中继续这个讨论 - Vyshakh
显示剩余2条评论

10

针对Swift 3的操作.

将此更改为-->

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

进入 -->

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

这个问题去年已经有一个被接受的答案了。你的回答没有增加或改进任何内容。你所做的只是让旧问题重新浮出水面。 - Fogmeister
4
@Fogmeister,那对我没有起作用,所以我发布了我的答案,因为它可能会对某些人有帮助,发布答案不会伤害任何人,在Stackoverflow上,你会发现许多其他答案而不仅仅是被采纳的答案。你为什么要给一个低分呢? - srivas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接