【问题标题】:Type "any" has no subscript members in alamofire 4 iOS swift [duplicate]类型“any”在alamofire 4 iOS swift中没有下标成员[重复]
【发布时间】: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 清楚地以字典开头。

标签: ios swift alamofire


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
相关资源
最近更新 更多