实战需求
SwiftUI iOS 完整项目之网络请求文章并列表显示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)