Swift:无法下标类型为 'Dictionary<String, NSObject>?' 的值

标签 swift closures alamofire

编辑:不重复:

该解决方案给出了'Could not find an overload for 'subscript' that accepts the supplied arguments' 错误。所以,不,这不是重复的。

这是函数声明。

        func auth(user: String, pass: String, completion: (returned: Bool, error: Bool, response: Dictionary<String, NSObject>?) -> ()){

response 可以是 nil

现在我试图访问在另一个文件中传回的值并收到错误:

        if let labelString = response["error_description"] as! String?{
            self.labelPrompt.text = labelString
        }

错误:无法为“字典”类型的值下标?具有“字符串”类型的索引

enter image description here

最佳答案

链接问题的副本:您需要在使用下标之前打开字典。

有很多方法(“if let”等),链接的答案通过添加 ? 给出了使用“可选绑定(bind)”的解决方案。在保存字典的变量和下标之间。

Playground 上的例子:

var response: Dictionary<String, NSObject>? = nil

// NOTICE THE "?" BETWEEN THE VARIABLE AND THE SUBSCRIPT

if let labelString = response?["error_description"] as? String {
    println(labelString)  // not executed because value for key is nil
}

response = ["test":"yep"]

if let labelString = response?["test"] as? String {
    println(labelString)  // "yep"
}

另一种解包字典的方法:

if let responseOK = response, let test = responseOK["test"] as? String {
    println(test) // "yep"
}

关于Swift:无法下标类型为 'Dictionary<String, NSObject>?' 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015990/

相关文章:

go - 将参数传递给函数闭包

ios - 迭代对象 Swift - 数组超出索引 - TableView 中的 AlamofireObjectMapper

ios - 我可以将 Alamofire 更新到版本 4 并在我的应用程序中仍然支持 iOS 8 吗?

ios - postman 请求到 Alamofire 请求

swift - 如何在 Swift 中检索对象的类型?

ios - Swift gcm推送无法收到通知

Swift:CoreData 符合 MKAnnotation

swift - 在 Swift 中使用 dispatch_once 单例模型

gradle - Groovy execute()。text组合

javascript - jquery 和 javascript 的闭包