如何在 swift 3 的 UITableView 中制作变量和使用
how to make variable and use in UITableView in swift 3
我在这些全局变量中成功附加了 "title" 、 "url" 和 Video 但是当我试图在 numberOfRowsInSection
中使用时( return titleName.count
)所以我得到 nil 或在 (cellForRowAt indexPath:
) 中作为 cell.videoTitle.text = titleName[indexPath.row]
所以我得到 nil..
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 ...
]
}
您上面的代码片段缺少将 JSON 检索到 data
的部分,该部分后来被 viewDidLoad()
中的 JSONSerialization
使用。
作为完整片段的示例,请查看此线程中的问题:How to get json to populate UITableView in Swift 3?
dataTask(with
异步工作。将 tableView.reloadData()
移动到 闭包末尾的完成块中。
两个注意事项:
- Swift 3 中的 JSON 字典是
[String:Any]
.
- 不鼓励您使用多个数组作为数据源。使用自定义结构或 class.
我在这些全局变量中成功附加了 "title" 、 "url" 和 Video 但是当我试图在 numberOfRowsInSection
中使用时( return titleName.count
)所以我得到 nil 或在 (cellForRowAt indexPath:
) 中作为 cell.videoTitle.text = titleName[indexPath.row]
所以我得到 nil..
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 ...
]
}
您上面的代码片段缺少将 JSON 检索到 data
的部分,该部分后来被 viewDidLoad()
中的 JSONSerialization
使用。
作为完整片段的示例,请查看此线程中的问题:How to get json to populate UITableView in Swift 3?
dataTask(with
异步工作。将 tableView.reloadData()
移动到 闭包末尾的完成块中。
两个注意事项:
- Swift 3 中的 JSON 字典是
[String:Any]
. - 不鼓励您使用多个数组作为数据源。使用自定义结构或 class.