json - 追加不是触发。- JSON 斯威夫特
问题描述
所以我目前有以下有效的代码
func createArray() -> [News] {
return [News(title: "Hello") , News(title: "how") , News(title: "You")]
}
但是我想要的是用远程 JSON 数据替换它,到目前为止,我让它工作到没有错误的地步。
然而,tableViewCell 似乎不想工作 - 我相信它与 append 函数有关。
tempNews.append(News(title: $0.title))
现在我检查 $0.title 是否打印出标题并且它确实如此所以问题必须是其他的东西。
newsdata.news.forEach(){
print($0.title)
// tempNews.append(News(title: $0.title))
tempNews.append(News(title: "1123"))
}
返回
Please stay safe on the roads.
Lost Beliefs
Dami Im - Crying Underwater
Dear Extinction Rebellion Protesters
Billie Eilish All Good Girls Go To Hell (Music Video Review)
Inferno Engulfs Conception
Council Kills Australian Icon
Third Time Lucky - pilot lands
Anchors Away For Ross Lyon
Sydney Under Attack
With Friends Like This...
Papa You Did Wrong
6Year Old French Tourist Injured
Bendigo Woman First Victorian to use new Assisted Dying Act
America Shocked By Back To Back Shootings
Channel Ten’s The Project Infighting Backstage.
但是当我尝试 tempNews.append(News(title: "1123"))
它不会将它附加到 tempNews 所以我现在知道附加不起作用。
以下确实附加
func createArray() -> [News] {
//var tempNews = [News] = []
var tempNews : [News] = []
let news1 = News(title: "Hello")
let news2 = News(title: "how")
let news3 = News(title: "You")
tempNews.append(news1)
tempNews.append(news2)
tempNews.append(news3)
return tempNews
}
代码
func newsfetch() -> [News]{
var artical = Array<Any>()
var tempNews: [News] = []
let jsonURLString = "https://api.drn1.com.au/api-access/news"
guard let feedurl = URL(string: jsonURLString) else { return tempNews }
URLSession.shared.dataTask(with: feedurl) { (data,response,err)
in
guard let news = data else { return }
do{
let newsdata = try JSONDecoder().decode(NewsData.self, from: news)
newsdata.news.forEach(){
print($0.title)
// tempNews.append(News(title: $0.title))
artical = News(title: "1123")
}
}catch let jsonErr{
print("error json ", jsonErr)
}
}.resume()
return tempNews(artical)
}
带卡姆兰代码的完整代码
//
// NewsViewController.swift
// DRN1
//
// Created by Russell Harrower on 26/11/19.
// Copyright © 2019 Russell Harrower. All rights reserved.
//
import UIKit
struct NewsData: Decodable{
let news: [articalData]
}
struct articalData: Decodable{
let title: String
}
class NewsViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var news: [News] = []
override func viewDidLoad() {
super.viewDidLoad()
self.newsfetch { news in
guard let news = news else { return }
}
//news = createArray()
// Do any additional setup after loading the view.
tableView.delegate = self
tableView.dataSource = self
}
func createArray() -> [News] {
return [News(title: "Hello") , News(title: "how") , News(title: "You")]
}
func newsfetch(_ completionHandler: @escaping ([News]?)->Void){
let jsonURLString = "https://api.drn1.com.au/api-access/news"
guard let feedurl = URL(string: jsonURLString) else { return }
URLSession.shared.dataTask(with: feedurl){ (data,response,err)
in
guard let news = data else { return }
do {
let newsdata = try JSONDecoder().decode(NewsData.self, from: news)
var tempNews: [News] = []
newsdata.news.forEach(){
tempNews.append(News(title: $0.title))
}
completionHandler(tempNews)
} catch let jsonErr {
print("error json ", jsonErr)
completionHandler(nil)
}
}.resume()
}
/*func newsfetch() -> [News]{
var tempNews: [News] = []
let jsonURLString = "https://api.drn1.com.au/api-access/news"
guard let feedurl = URL(string: jsonURLString) else { return tempNews }
URLSession.shared.dataTask(with: feedurl) { (data,response,err)
in
guard let news = data else { return }
do{
let newsdata = try JSONDecoder().decode(NewsData.self, from: news)
newsdata.news.forEach(){
DispatchQueue.main.async {
print($0.title)
tempNews.append(News(title: $0.title))
print(tempNews.count)
}
}
}catch let jsonErr{
print("error json ", jsonErr)
}
}.resume()
return tempNews
}*/
override func viewDidAppear(_ animated: Bool) {
self.tabBarController?.navigationItem.title = "News"
// let controller = AVPlayerViewController()
// controller.player = player
// Modally present the player and call the player's play() method when complete.
// present(controller, animated: false) {
// player.play()
// }
}
}
extension NewsViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return news.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let newsa = news[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "NewsCell") as! NewsCell
cell.setNews(news: newsa)
return cell
}
}
问题在屏幕上,表格仍然是空白的。
解决方案
推荐阅读
- apache-spark - Spark RDD:从其他 RDD 中查找
- regex - 如何在文本文件中查找和替换框字符?
- ruby - 推送 Heroku 应用程序时 ruby 出错
- java - Gradle CLI:如何查看特定选项的文档
- javascript - 在作用域插槽中传递道具不起作用
- python - 这两种保存keras机器学习模型权重的方式有什么区别?
- java - 在调用 getcellData() 时从 excel 中获取任何值 - Selenium WebDriver
- javascript - 使用 'timeupdate' 事件实现视频字幕更改
- jquery - 检索输入文本中的数据
- java - spring-jdbc vs spring-data-jdbc,它们支持什么