键入"任何"在alamofire 4 iOS swift中没有下标成员

时间:2017-07-13 12:31:52

标签: ios swift alamofire

我知道这个问题可能是重复的。但我试图找出这个解决方案的利益溢出。不幸的是,我没有想出正确的答案。在这里我做了什么。

我试图使用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]]'索引类型为字符串

2 个答案:

答案 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]]

进行强制转换