不能用字符串类型的索引下标 NSDictionary 类型的值

Posted

技术标签:

【中文标题】不能用字符串类型的索引下标 NSDictionary 类型的值【英文标题】:cannot subscript a value of type NSDictionary with an index of type string 【发布时间】:2015-08-04 06:29:13 【问题描述】:
    var url: NSURL = NSURL(string: urlPath)!

    var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
    request.setValue("Basic \(base64EncodedCredential)", forHTTPHeaderField: "Authorization")
    request.HTTPMethod = "GET"

    var dataVal: NSData =  NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error:nil)!

    var err: NSError
    println(dataVal)


    //var jsonResult : NSDictionary?
    var jsonResult  = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary

    println("Synchronous  \(jsonResult)")
    jsonResult["records"] 

这是发生错误的地方,我只想从我的jsonResult 中获取一个值,该值在控制台上正确打印。

【问题讨论】:

【参考方案1】:

您将 jsonResult 类型转换为 NSDictionary,而不是使用 [String:AnyObject]

如果您使用NSDictionary,则应使用NSDictionaryvalueForKey(key)objectForKey(key) 方法来获取密钥的值。

    var url: NSURL = NSURL(string: urlPath)!
    var err: NSError?

        var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
        request.setValue("Basic \(base64EncodedCredential)", forHTTPHeaderField: "Authorization")
        request.HTTPMethod = "GET"

        var dataVal: NSData =  NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error:nil)!

        var err: NSError
        println(dataVal)


        //var jsonResult : NSDictionary?
        var jsonResult:AnyObject?  = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableLeaves, error: &err)  

        println("Synchronous  \(jsonResult)")
        if let result = jsonResult as? [String: AnyObject] 
           if let oneValue = result["records"] as? String  //Here i am considering value for jsonResult["records"] as String, if it other than String, please change it.
             println(oneValue)
           
       

【讨论】:

var jsonResult = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableLeaves, error: &err) 使用这一行。 你确定结果是字典,而不是数组。现在检查编辑后的答案。 是的朋友,如果让 user = parsedObject as? NSDictionary if let xxxx = user["xxxx"] as? NSDictionary if let xxxx = records["xxxx"] as? NSString //3 println("可选绑定: (xxxx)") 如果有帮助,请接受正确答案。它也会帮助其他人。 :) 嗨!请问如果我想将oneValue 分配给标签怎么办?当我在控制台中将其设置为 label.text = oneValue 时,我得到了 Optional(xxx) 并且未设置标签,因为可选项就像 nil。有什么帮助吗?

以上是关于不能用字符串类型的索引下标 NSDictionary 类型的值的主要内容,如果未能解决你的问题,请参考以下文章

不能用“item”类型的索引为“[item]”类型的值下标

无法使用“Int”类型的索引为“[String : String]”类型的值下标

带有 AnyObject 下标的 Realm.io

无法使用“String”类型的索引为“[[String : Any]]”类型的值下标

不能为“[(String)] 类型的值下标?”具有“Int”类型的索引

Swift 3 不能使用 SwiftyJSON 和 Alamofire 为“String”类型的值下标“String”类型的索引