类型“Any”没有下标成员/Swift 3 [重复]
Posted
技术标签:
【中文标题】类型“Any”没有下标成员/Swift 3 [重复]【英文标题】:Type "Any" has no subscript members / Swift 3 [duplicate] 【发布时间】:2016-09-28 17:35:00 【问题描述】:在 Swift 2 中一切正常,但在 Swift 3 升级后却失败了。它只是给出以下错误:
类型“Any”没有下标成员
在下面一行:
for video in JSON["items"] as? NSArray
我之前的问题和解决方法可以在这里找到:
Ambiguous use of 'subscript' with NSArray & JSON
我在输入问题时也查看了建议的问题和答案,但到目前为止还没有找到解决方案。
class videoModel: NSObject
let API_KEY = "Xxxxxxxxxxx"
let UPLOADS_PLAYLIST_ID = "yyyyyyyyyyyyyyy"
var videoArray = [Video]()
var delegate: VideoModelDelegate?
let urladdress = "https://www.googleapis.com/youtube/v3/playlistItems"
func getFeedVideos()
Alamofire.request((urladdress), method: .get, parameters: ["part":"snippet", "playlistId": UPLOADS_PLAYLIST_ID,"key": API_KEY, "maxResults": "50"], encoding: JSONEncoding.default).responseJSON(completionHandler: (response) -> Void in
if let JSON = response.result.value
var arrayOfVideos = [Video]()
print(JSON)
for video in JSON["items"] as? NSArray
let videoObj = Video()
videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as! String
videoObj.videoTitle = video.valueForKeyPath("snippet.title") as! String
videoObj.videoDescription = video.valueForKeyPath("snippet.description") as! String
videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as! String
arrayOfVideos.append(videoObj)
self.videoArray = arrayOfVideos
if self.delegate != nil
self.delegate?.dataReady()
)
【问题讨论】:
嘿,你解决了这个问题吗,如果是,请分享最终答案。我有完全相同的错误。我也在使用完全相同的代码。请在修复此错误后分享最终代码。谢谢 请看这个:cl.ly/02030q1Q0E10。如果您需要更多信息,请告诉我。 你能分享课程的完整源代码吗?我仍然有问题:如果让 JSON = response.result.value as? NSArray,总是假的 请在下面的链接中找到完整的源代码; dl.dropboxusercontent.com/u/20847754/videoModel.swift 嘿,你能和我分享整个项目吗?我真的很难修复它。我尝试了一切来运行,但我仍然遇到项目问题。请帮我。谢谢 【参考方案1】:您需要将JSON
对象的类型指定为[String : Any]
。
if let JSON = response.result.value as? [String : Any]
if let items = JSON["items"] as? [[String : Any]]
for video in items
//Here use video["snippet.resourceId.videoId"] instead of value for key
注意:如果您使用 swift 通用数组和字典对象而不是 NSArray
和 NSDictionary
,那么在 swift 中会很糟糕。
【讨论】:
当我这样做时,我在下一行得到一个错误;对于 JSON["items"] 中的视频作为? NSArray 并建议我将其更改为以下内容:for video in (JSON["items"] as?NSArray)!但随后我在以下行中收到错误消息:无法使用类型为“(字符串)”的参数列表调用“值””videoObj.videoId =(video as AnyObject).value(“sn-p.resourceId .videoId") as! 字符串 检查编辑后的答案以上是关于类型“Any”没有下标成员/Swift 3 [重复]的主要内容,如果未能解决你的问题,请参考以下文章