不能用字符串类型的索引下标 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
,则应使用NSDictionary
的valueForKey(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 类型的值的主要内容,如果未能解决你的问题,请参考以下文章
无法使用“Int”类型的索引为“[String : String]”类型的值下标
无法使用“String”类型的索引为“[[String : Any]]”类型的值下标
不能为“[(String)] 类型的值下标?”具有“Int”类型的索引
Swift 3 不能使用 SwiftyJSON 和 Alamofire 为“String”类型的值下标“String”类型的索引