类型“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
,而是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
是否不为零。
【讨论】:
现在我正在尝试这种方式现在我正在尝试这种方式如果让 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 是不是支持结构化为有序值列表的 JSON?参数为 [String: Any],仅符合名称/值对的集合