Значение типа 'Any' не имеет члена 'valueForKeyPath' - PullRequest
0 голосов
/ 30 июня 2018

Я искал другие вопросы о переполнении стека, но, похоже, это не работает для моего случая.

Я создаю приложение YouTube, и мой код указан ниже.

     if let JSON = response.result.value as? NSDictionary{

            var arrayOfVideos = [Video]()

            for video in JSON["items"] as! NSArray{
                print(video)

                //Create video onjects off of the JSON response
                let videoObj = Video()
      //I got errors following part
                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
        }else{
            print("couldn't get video information")
        }

У меня также есть класс Video, который определяет заголовок, описание и эскиз.

class Video: NSObject {

 var videoId:String = ""
 var videoTitle:String = ""
 var videoDescription:String = ""
 var videoThumbnailUrl:String = ""
}

И я получил эти ошибки.

Значение типа 'Any' не имеет члена 'valueForKeyPath'

А также этот

Поток 1: фатальная ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

Я ценю любую помощь. Заранее спасибо.

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете попробовать

if let JSON = response.result.value as? [String:Any] {

   var arrayOfVideos = [Video]()

   if let videos = JSON["items"] as? [[String:Any]] {

      for video in videos {

          let videoObj = Video()

          if let videoId = video["snippet.resourceId.videoId"] as? String {

              videoObj.videoId = videoId 
          }
          if let videoTitle = video["snippet.title"] as? String {

              videoObj.videoTitle = videoTitle
          }
          if let videoDescription = video["snippet.description"] as? String {

              videoObj.videoDescription = videoDescription
          }
          if let videoThumbnailUrl = video["snippet.thumbnails.maxres.url"] as? String {

              videoObj.videoThumbnailUrl = videoThumbnailUrl
          }

          arrayOfVideos.append(videoObj)
      }
   }
}       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...