Переходите к следующему результату, если индекс выходит за пределы SwiftyJSON & AlamoFire - PullRequest
0 голосов
/ 05 мая 2018

В настоящее время у меня есть список имен файлов, которые я вставляю в Alamofire.request, чтобы в конечном итоге .append "videoId" из файла JSON с Youtube. Когда я жестко закодирую поисковые запросы в списке, который, как я знаю, приведет к результатам видео, это прекрасно работает. Но, к сожалению, некоторые из имен файлов в списке не находят видео. это приводит к fatal error: Index out of range Я надеюсь найти способ перейти к следующему элементу в списке, когда "videoId" недоступен. Я экспериментировал с else, continue и т. Д., Но никогда не мог понять это правильно. так что в этом примере нет попыток перебрать неудачный поиск

Я новичок в кодировании, поэтому не стесняйтесь менять, если я полностью выключен.

Вот мой код. Это внутри моей функции, которая также получает мои нужные имена файлов и вставляет их в [String]

for i in testList {

    Alamofire.request("https://www.googleapis.com/youtube/v3/search?key=\(API_Key)&part=snippet&q=\(i)%20Music%20Video&maxResults=1&type=video&order=relevance").responseJSON { (response)  in

        print("Result: \(response.result)")
            var json = JSON(response.result.value as Any)
        print(json)

        if let _ = json["items"].array{


                    if json["items"].arrayValue[0]["id"].exists(){
                        let songPath = json["items"].arrayValue[0]["id"]
                        let videoIdPath = songPath["videoId"].stringValue
                        var arrayOfVideos = ""


                        arrayOfVideos.append(videoIdPath)
                        print(arrayOfVideos)
                        videoArray += [arrayOfVideos] }

Это ответ на запрос YouTube для контекста

Result: SUCCESS
{
  "items" : [
    {
      "etag" : "\"95M1zlW0txkV42I4OG1Zscxrg5A\/TwSmd4IGGf1uBi-y10rCaZ53JsU\"",
      "kind" : "youtube#searchResult",
      "id" : {
        "kind" : "youtube#video",
        "videoId" : "9jfhlttiQws"
      },
      "snippet" : {
        "thumbnails" : {
          "default" : {
            "url" : "https:\/\/i.ytimg.com\/vi\/9jfhlttiQws\/default.jpg",
            "width" : 120,
            "height" : 90
          },
          "high" : {
            "url" : "https:\/\/i.ytimg.com\/vi\/9jfhlttiQws\/hqdefault.jpg",
            "width" : 480,
            "height" : 360
          },
          "medium" : {
            "url" : "https:\/\/i.ytimg.com\/vi\/9jfhlttiQws\/mqdefault.jpg",
            "width" : 320,
            "height" : 180
          }
        },
        "channelId" : "UCdWVO7O7stk7MNKVARRV8rw",
        "title" : "LUAM - Clockwork Indigo (The Flatbush ZOMBiES + The Underachievers) (LYRICS)",
        "publishedAt" : "2014-10-19T01:37:31.000Z",
        "description" : "LUAM by clockwork Indigo consisting of Beast Coast rap groups Flatbush ZOMBiES & The Underachiever off of their collaborative Debut Mixtape \"Clockwork ...",
        "liveBroadcastContent" : "none",
        "channelTitle" : "JayMendezTv"
      }
    }
  ],
  "kind" : "youtube#searchListResponse",
  "nextPageToken" : "CAEQAA",
  "regionCode" : "US",
  "pageInfo" : {
    "resultsPerPage" : 1,
    "totalResults" : 10073
  },
  "etag" : "\"95M1zlW0txkV42I4OG1Zscxrg5A\/KIryoSi8eZnM0UdfR0ZqyaHGB_k\""
}
9jfhlttiQws

1 Ответ

0 голосов
/ 06 мая 2018

Никто не ответил на мой вопрос, но, к счастью, я сам нашел решение. Если результат на YouTube не найден, массив "items" будет пустым, поскольку не будет найдено "videoId". Поэтому все, что мне нужно было сделать, это добавить в свой код оператор if, например

  if let items = json["items"].array{
if items.isEmpty{
                    return
                }
                else {
...