JSON与使用数组的SwiftUI
我是SwiftUI新手,以前只使用过UIKit。我尝试使用JSON显示标题,但所有教程视频都使用列表。我不想使用任何显示所有数据的JSON列表。例如,只想获取标题的第二个或特定数组 如何在SwiftUI中删除列表? 我的看法是: 网络管理员:JSON与使用数组的SwiftUI,swift,swiftui,uikit,Swift,Swiftui,Uikit,我是SwiftUI新手,以前只使用过UIKit。我尝试使用JSON显示标题,但所有教程视频都使用列表。我不想使用任何显示所有数据的JSON列表。例如,只想获取标题的第二个或特定数组 如何在SwiftUI中删除列表? 我的看法是: 网络管理员: class NetworkManager: ObservableObject { @Published var posts = [Post]() func fetchData() { if let url
class NetworkManager: ObservableObject {
@Published var posts = [Post]()
func fetchData() {
if let url = URL(string: "https://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()
}
}
}
和我的Json结构文件:
struct Results: Decodable {
let hits: [Post]
}
struct Post: Decodable, Identifiable {
var id: String {
return objectID
}
let objectID: String
let points: Int
let title: String
}
我不想使用任何显示所有数据的JSON列表。只要
例如,获取标题的第二个或特定数组
您可以使用计算属性从posts
数组访问特定元素(及其标题):
struct ContentView: View {
@ObservedObject var networkManager = NetworkManager()
// return the title of the second item in the `posts` array
var title: String {
guard networkManager.posts.count >= 2 else {
// decide what to do when data is not yet loaded or count is <= 1
return "Loading..."
}
return networkManager.posts[1].title
}
var body: some View {
NavigationView {
Text(title)
.navigationBarTitle("H4X0R NEWS")
}
.onAppear {
self.networkManager.fetchData()
}
}
}
struct ContentView:View{
@ObservedObject var networkManager=networkManager()
//返回“posts”数组中第二项的标题
变量标题:字符串{
guard networkManager.posts.count>=2个else{
//决定当数据尚未加载或计数未加载时要执行的操作
struct ContentView: View {
@ObservedObject var networkManager = NetworkManager()
// return the title of the second item in the `posts` array
var title: String {
guard networkManager.posts.count >= 2 else {
// decide what to do when data is not yet loaded or count is <= 1
return "Loading..."
}
return networkManager.posts[1].title
}
var body: some View {
NavigationView {
Text(title)
.navigationBarTitle("H4X0R NEWS")
}
.onAppear {
self.networkManager.fetchData()
}
}
}