类型“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 通用数组和字典对象而不是 NSArrayNSDictionary,那么在 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

类型'Any'没有下标成员Swift 3

Swift 3 - 类型'Any'没有下标成员

类型 Any 没有下标成员 Swift 3.0

类型“任何”没有下标成员[重复]

类型 Any 没有下标成员 Swift 3.0 中的错误?

swift 3 Type 'Any' 没有下标成员? [复制]