2017-05-28 78 views
0

我成功地追加這些全局變量中的「title」,「url」和Video,但是當我試圖在numberOfRowsInSection中使用(return titleName.count),所以我得到零或在(cellForRowAt indexPath:)爲cell.videoTitle.text = titleName[indexPath.row]所以我得到零..如何使變量和在UITableView中使用swift 3

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

嘗試使用[Object Mapper](https://github.com/Hearst-DD/ObjectMapper)解析您的JSON。它會讓你從所有這些條件中解脫出來。 [這裏](https://stackoverflow.com/questions/41734982/parsing-nested-array-of-dictionaries-using-object-mapper/41735194#41735194)是一個例子 –

回答

1

dataTask(with以異步方式工作。在閉包結束時將tableView.reloadData()轉換爲完成塊。

兩個附註:

  • 在夫特3所述的JSON字典是[String:Any]
  • 您不鼓勵使用多個數組作爲數據源。使用自定義結構或類。
1

你的代碼片斷上述失蹤,您檢索JSON到,後來在viewDidLoad()使用的JSONSerializationdata的部分。

例如作爲一個完整的片段時,請確認在這個線程的問題:How to get json to populate UITableView in Swift 3?

+0

感謝您的回覆我修復了我的代碼,但doesn不工作.. – King

相關問題