Как создать фиксированное количество просмотров из json API в SwiftUI? - PullRequest
0 голосов
/ 28 апреля 2020

Итак, я учусь, как использовать SwiftUI с json API. В настоящее время я генерирую представления через список и ForEach L oop. Мне интересно, как я могу сделать так, чтобы он генерировал только первые, скажем, 10 элементов в массиве posts, вместо генерации всего списка из API. В основном я хочу использовать RandomElement () для отображения 10 случайных записей из всего массива. Я только начинаю здесь и учусь, поэтому любая помощь будет оценена.

Ниже приведен код моего основного представления, отображающего список

import SwiftUI



struct postList: View {
    //state variable of the posts
     @State var posts: [Post] = []
        var array = [Post]()


    var body: some View {

        List {

            ForEach(posts) { post in

            VStack(alignment: .leading) {
                Text(post.title)
                    .font(.headline)

                Text(post.body)
                    .font(.callout)
            }
            .padding()

            }




        }
        .onAppear() {
            Api().getPosts { (posts) in
                self.posts = posts
            }
        }





    }
}

struct postList_Previews: PreviewProvider {
    static var previews: some View {
        postList()
    }
}


Ниже приведен файл данных, который я использую для извлечения данных json

import SwiftUI

struct Post: Codable, Identifiable {
    let id = UUID()
    var title: String
    var body: String

}

class Api {

    func getPosts(completion: @escaping ([Post]) -> ()) {

        guard let url = URL(string: "http://jsonplaceholder.typicode.com/posts") else { return }

        URLSession.shared.dataTask(with: url) { (data, _, _) in
            let posts = try! JSONDecoder().decode([Post].self, from: data!)

            DispatchQueue.main.async {
                completion(posts)
            }

        }
        .resume()

    }

}



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...