Я успешно добавляю "title", "url" и Video в эти глобальные переменные, но когда я пытаюсь использовать в numberOfRowsInSection как (return titleName.count), поэтому я получаю ноль или в ({{X2} }) как cell.videoTitle.text = titleName[indexPath.row], так что я получаю ноль ..

Globalvariables is ...
var titleName:[String] = []
var videoID:[String] = []
var valueKey:[String] = []

А затем в viewDidLoad ()

  override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self

let urlRequest = URL(string: urlString)
URLSession.shared.dataTask(with: urlRequest! , completionHandler:{(data, response, error) -> Void in

    if (error != nil ){
        print(error.debugDescription)
    } else { 

        do{
    if let jsonObject = try?JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String : AnyObject] {
        if let itemsArray = jsonObject?["items"] as? [[String:AnyObject]]{
            for snippetArray in itemsArray{
                if var snippet = snippetArray["snippet"] as? [String : AnyObject]{
                    if let titleItems = snippet["title"] as? String{
                        self.titleName.append(titleItems)

                    }
                    if let thumbnail = snippet["thumbnails"] as? [String : AnyObject]{
                        if let highValue = thumbnail["high"] as? [String : AnyObject]{
                            if let urlValueKey = highValue ["url"] as? String{
                                self.valueKey.append(urlValueKey)
                        }
                      }
                    }
                    if let resource = snippet["resourceId"] as? [String : AnyObject]{
                        if let videoId = resource["videoId"] as? String{
                            self.videoID.append(videoId)
                        }
                    }
                }


            }
            }

        }

        } catch let error as NSError {
            print(error)
        }
    }
}).resume()

tableView.reloadData()

}

А вот JSOn ....

{
 "kind": "youtube#playlistItemListResponse",
 "etag": "\"Y3xTLFF3RLtHXX85JBgzzgp2Enw/ep-DtNxjJwMQbpCO1Lk3_ggMScU\"",
 "nextPageToken": "CAUQAA",
 "pageInfo": {
  "totalResults": 1636,
  "resultsPerPage": 5
 },
 "items": [
  {

   "kind": "youtube#playlistItem",
   "etag": "\"Y3xTLFF3RLtHXX85JBgzzgp2Enw/SYrDBZ2Ywgpf3zgCreEdB4PIf1o\"",
   "id": "UUZwDRPIG5DD2lxeCjap51NdbKiDO_M62c",
   "snippet": {
    "publishedAt": "2015-06-25T01:50:54.000Z",
    "channelId": "UCK8sQmJBp8GCxrOtXWBpyEA",
    "title": "The Google app: Summer",
    "description": "\"OK Google, when is Summer over?\"\n\nTalk to Google to get answers, find stuff nearby, and get things done. The Google app. Available on iOS and Android. \n\nDownload the app here: http://www.google.com/search/about/download/",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/BVGKskYZrw8/default.jpg",
      "width": 120,
      "height": 90
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/BVGKskYZrw8/mqdefault.jpg",
      "width": 320,
      "height": 180
     },
     "high": {
      "url": "https://i.ytimg.com/vi/BVGKskYZrw8/hqdefault.jpg",
      "width": 480,
      "height": 360
     },
     "standard": {
      "url": "https://i.ytimg.com/vi/BVGKskYZrw8/sddefault.jpg",
      "width": 640,
      "height": 480
     },
     "maxres": {
      "url": "https://i.ytimg.com/vi/BVGKskYZrw8/maxresdefault.jpg",
      "width": 1280,
      "height": 720
     }
    },
    "channelTitle": "Google",
    "playlistId": "UUK8sQmJBp8GCxrOtXWBpyEA",
    "position": 0,
    "resourceId": {
     "kind": "youtube#video",
     "videoId": "BVGKskYZrw8"
    }
   }
  },
  ... MORE ITEMS ...
 ]
}
0
King 29 Май 2017 в 00:44

2 ответа

Лучший ответ

dataTask(with работает асинхронно. Переместите tableView.reloadData() в блок завершения в конце закрытия.

Две заметки:

  • Словарь JSON в Swift 3 - это [String:Any].
  • Вам не рекомендуется использовать несколько массивов в качестве источника данных. Используйте пользовательскую структуру или класс.
1
vadian 29 Май 2017 в 04:03

В приведенном выше фрагменте кода отсутствует часть, в которой вы извлекаете JSON в data, который впоследствии использовался JSONSerialization в viewDidLoad().

В качестве примера полного фрагмента, пожалуйста, проверьте вопрос в этой теме: Как заставить json заполнить UITableView в Swift 3?

1
Gray 29 Май 2017 в 00:22