【问题标题】:cannot subscript a value of type NSDictionary with an index of type string不能用字符串类型的索引下标 NSDictionary 类型的值
【发布时间】: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 中获取一个值,该值在控制台上正确打印。

【问题讨论】:

    标签: swift indexing subscript


    【解决方案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。有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2018-11-23
    • 2019-11-29
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多