Alamofire 4.0 上的“类型‘任何’没有下标成员”错误
Posted
技术标签:
【中文标题】Alamofire 4.0 上的“类型‘任何’没有下标成员”错误【英文标题】:"Type 'Any' has no subscript members" error on Alamofire 4.0 【发布时间】:2016-09-23 08:06:36 【问题描述】:我正在使用Alamofire 4.0
和Swift 3.0
,并且我正在使用以下代码来解析JSON
:
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON (response:DataResponse<Any>) in
switch(response.result)
case .success(_):
if let JSON = response.result.value
print(JSON)
//print(JSON["name"])
//print(JSON["age"])
break
case .failure(_):
print("There is an error")
break
它给了我以下回应:
(
Name = "Peter";
Age = "18";
)
问题是我无法访问该值(Name
和 Age
),因为当我尝试执行 JSON["name"]
时出现以下错误:
类型 'Any' 没有下标成员
我也尝试添加as? [String: Any]
,因为这个问题建议:Alamofire fire variable type has no subscript members,另一个也建议:Type Any has no subscript members Error in Swift 3.0?,但是当我使用它时,任何回应都会给我。
如果我使用:
case .success(_):
if let JSON = response.result.value as? [String: Any]
print(JSON)
print(JSON["TitularEmail"] as! String)
break
Xcode
或 Xcode 控制台中均未显示任何错误。相反,没有给出任何回应。
如何以正确的方式解决此错误?没关系,在我没有收到任何错误之前的解决方案,但我也没有得到任何响应,所以它根本没有解决它。
提前致谢!
【问题讨论】:
您的 JSON 似乎是一个数组,而不是字典。所以试试看? [[String: Any]] 不一样? [字符串:任意] 【参考方案1】:试试下面的代码:
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON response in
switch(response.result)
case .success(_):
if let JSON = response.result.value as! [[String : Any]]!
print("JSON: \(JSON)")
let dic = JSON[0] as [String:AnyObject]!
print("TitularEmail : ",dic?["TitularEmail"])
break
case .failure(_):
print("There is an error")
break
【讨论】:
感谢您的回复,但它给了我同样的行为。控制台上没有错误和响应。 你能打印 JSON 吗? 不,当我尝试投射它时,我无法打印 JSON。当我不投射时,我可以完美地打印它。 检查我更新的答案。因为您的响应在数组中,所以您需要像@A Bào 所说的那样输入“[[String : Any]]”。 非常感谢。它非常接近。现在我收到TitularEmail : Optional(Peter)
。我怎样才能得到里面的文字?我试过dic?["TitularEmail"].text
,但它给了我nil
的价值。以上是关于Alamofire 4.0 上的“类型‘任何’没有下标成员”错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?
Swift 3.0 Alamofire 4.0 - Domain=NSURLErrorDomain Code=-999 “取消”
在 Alamofire 4.0 中初始化 SessionManager