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

我是SwiftUI新手,以前只使用过UIKit。我尝试使用JSON显示标题,但所有教程视频都使用列表。我不想使用任何显示所有数据的JSON列表。例如,只想获取标题的第二个或特定数组

如何在SwiftUI中删除列表? 我的看法是:

网络管理员:

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()
        }
    }
}