类型“any”在alamofire 4 iOS swift中没有下标成员[重复]

Posted

技术标签:

【中文标题】类型“any”在alamofire 4 iOS swift中没有下标成员[重复]【英文标题】:Type "any" has no subscript members in alamofire 4 iOS swift [duplicate] 【发布时间】:2017-07-13 12:31:51 【问题描述】:

我知道这个问题可能是重复的。但我试图在股权溢出中找出这个解决方案。不幸的是,我没有想出正确的答案。这是我所做的。

我试图使用 alamofire 访问 Youtube 数据。在我看来DidLoad

    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]]' 类型的值

【问题讨论】:

阅读 JSON。这很容易。只有 2(两个!)集合类型:数组([])和字典()。这个 JSON 清楚地以字典开头。 【参考方案1】:

在这里发布: if let JSON = response.result.value as! [[String : Any]]!

首先:如果您使用可选链接 (if let),请不要使用强制转换(as![[String : Any]]!)。

其次,您的 JSON 不是Dictionary,而是ArrayDictionaries

试试吧: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 是否不为零。

【讨论】:

现在我正在尝试这种方式现在我正在尝试这种方式如果让 JSON = response.result.value as? [String: Any] 用于 JSON ["item"] 中的视频为! NSArray print(video) But getting this Fatal error fatal error: unexpectedly found nil while unwrapping an Optional value 我现在该怎么办。我真的很困惑 看起来您的 JSON 不包含“item”元素。编辑您的问题并在那里发布您的 JSON【参考方案2】:

您不能对 ANY 变量类型重新转换,您可以使用 [String:[String:Any]] 进行转换

【讨论】:

那我现在该怎么办?? 直接转换为像 NSArray 或 NSDictionnary 这样的类型。如果您真的更喜欢使用 [:] 方法进行强制转换,只需通过类型更改 any,例如 [String:[String:String]] 现在我正在尝试这种方式现在我正在尝试这种方式如果让 JSON = response.result.value as? [String: Any] 用于 JSON ["item"] 中的视频为! NSArray print(video) But getting This Fatal error 致命错误:在展开可选值时意外发现 nil

以上是关于类型“any”在alamofire 4 iOS swift中没有下标成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用“((Any))”类型的参数列表调用“JSON” - 使用 AlamoFire 和 SwiftyJSON

Alamofire 4.0 上的“类型‘任何’没有下标成员”错误

如何在 Swift 5 中使用 Alamofire 解析 json

从“数据?”到不相关的类型 '[String : Any]' 总是失败

使用 Alamofire 的下载速率

Alamofire 是不是支持结构化为有序值列表的 JSON?参数为 [String: Any],仅符合名称/值对的集合