SwiftUI iOS 完整项目之网络请求文章并列表显示JSON ObservableObject URLSession

实战需求

SwiftUI iOS 完整项目之网络请求文章并列表显示JSON

本文价值与收获

看完本文后,您将能够作出下面的界面

网络请求文章并列表显示JSON

网络请求文章并列表显示JSON

看完本文您将掌握的技能

  • 网络数据更新

    .onAppear(perform: {
            self.networkManager.fetchData()
    })
  • 网络数据遍历方式

    
    List(networkManager.posts){ post in
                NavigationLink(
                    destination: DetailView(url: post.url)){
                    HStack{
                        Text(String(post.points))
    
                        Text(post.title)
                    }
    
                }

}


-  基于ObservableObject构建网络请求组件URLSession

class NetworkManager: ObservableObject {

@Published var posts = [Post]()

func fetchData() {

    if let url = URL(string: "http://hn.algolia.com/api/v1/search?tags=front_page"){
        let session = URLSession(configuration: .default)
        let task = session.dataTask(with: url){ (data, response, error) in
            if error == nil {
                let decoder = JSONDecoder()
                if let safeData = data{
                    do{
                        let results =    try decoder.decode(Results.self, from: safeData)
                        DispatchQueue.main.async {
                            self.posts = results.hits
                        }

                    }catch{
                        print(error)
                    }
                }
            }
        }
        task.resume()
    }
}

}


***
# 实战代码

import SwiftUI

struct ContentView: View {

@ObservedObject var networkManager = NetworkManager(
)

var body: some View {
    NavigationView{
        List(networkManager.posts){ post in
            NavigationLink(
                destination: DetailView(url: post.url)){
                HStack{
                    Text(String(post.points))

                    Text(post.title)
                }

            }

        }
        .navigationBarTitle("H4X0R NEWS")
    }
    .onAppear(perform: {
        self.networkManager.fetchData()
    })
}

}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

let post = [

Post(objectID: "", points: 1, title: "hi", url: "")

]



***
# 全文地址
CSDN:
- [原创 SwiftUI iOS 完整项目之网络请求文章并列表显示JSON](https://swiftui.blog.csdn.net/article/details/115272469)

小专栏:
- [SwiftUI iOS 完整项目之网络请求文章并列表显示JSON](https://xiaozhuanlan.com/topic/22809)

***

# 加入我们一起学习SwiftUI
QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:[www.openswiftui.com](https://www.openswiftui.com)

发表回复