我知道这个问题可能是重复的。但我试图找出这个解决方案的利益溢出。不幸的是,我没有想出正确的答案。在这里我做了什么。
我试图使用alamofire访问Youtube数据。在我的viewDidLoad
中 let API_KEY = "**************"
let UPLOADS_PLAYLIST_ID = "PLqQMDoH89jqEoHMTsxxyMz1Hym_pOViq6"
let CHANNEL_ID = "UCcMUpFCaFhlyjZyy9d9LeRA"
let parameters = ["part":"snippet","channelId":CHANNEL_ID,"playListId":UPLOADS_PLAYLIST_ID,"key":API_KEY]
Alamofire.request("https://www.googleapis.com/youtube/v3/playlists", parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
if let JSON = response.result.value{
for video in JSON["item"] as! NSArray {
print(video)
}
}
}
它给我错误类型"任何"没有下标成员
另外我尝试了另一种方式,但这也给了我错误
Alamofire.request("https://www.googleapis.com/youtube/v3/playlists",
parameters: parameters, encoding: URLEncoding.default, headers:
nil).responseJSON { (response) in
switch(response.result) {
case .success(_):
if let JSON = response.result.value as! [[String : Any]]!{
for video in JSON["item"] as! NSArray {
print(video)
}
}
break
case .failure(_):
print("There is an error")
break
}
}
它会给出错误,并告诉它不能下标类型' [[string:any]]'索引类型为字符串
答案 0 :(得分:1)
在此发布:
if let JSON = response.result.value as! [[String : Any]]!
首先:如果你使用可选链接(if let
),请不要使用强制转换(as!
和[[String : Any]]!
)。
其次,您的JSON不是Dictionary
,而是Array
Dictionaries
。
请尝试:
if let JSON = response.result.value as? [String : Any]
另外,当你尝试
时if let JSON = response.result.value{
for video in JSON["item"] as! NSArray {
print(video)
}
}
您没有将JSON
变量投射到Dictionary
,只是检查JSON
是否为零。
答案 1 :(得分:0)
你不能重新转换任何变量类型,可以使用[String:[String:Any]]
进行强制转换