Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
追加不是开火JSON Swift_Json_Swift - Fatal编程技术网

追加不是开火JSON Swift

追加不是开火JSON Swift,json,swift,Json,Swift,所以我现在有下面的代码可以工作 func createArray() -> [News] { return [News(title: "Hello") , News(title: "how") , News(title: "You")] } 然而,我想要的是用远程JSON数据替换它,到目前为止,我让它工作到没有错误的地步 然而,tableViewCell似乎不想工作——我相信这与append函数有关 tempNews.append(News(titl

所以我现在有下面的代码可以工作

  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(新闻(标题:“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
    }
代码


问题在屏幕上,表格仍然空白。

您如何确定
tempNews.append(新闻(标题:“1123”)
不工作?什么是
newsdata
?@FaysalAhmed上面是所有的标题,它应该显示什么是
newsdata
?确认您可以在
foreach
循环前后打印
tempNews
数组计数。如果计数打印不同的数字,则追加工作正常。请试试这个。@RussellHarrower在swift中读到了关于结案的内容。您正在执行的任务是一个异步任务,将在稍后而不是立即向您提供数据。因此,在将数据附加到tempNews之前,您将返回
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
    }
}