Как перейти и отобразить структуру SwiftUI по идентификатору - PullRequest
0 голосов
/ 17 марта 2020

Итак, мне удалось отобразить изображения вместе с текстом со своего сервера в ContentView

struct ContentView: View {
   init() {
            Webservice().getAllPosts {
                print($0)
            }
        }

    @ObservedObject var model = PostListViewModel()

        var body: some View {

            List(model.posts) { post in

                 VStack{
                    Text("Title: ").bold()
                        + Text("\(post.title)")

                    ImageView(withURL: "http://localhost:8000/\(post.path.replacingOccurrences(of: " ", with: "%20"))")

                        Text("Description: ").bold()
                        + Text("\(post.description)")


                }
            }

        }
}

Хотя данные, которые я получаю, выглядят так:

[Test.Post(id: "9ffb2c83-45ed-4198-b6ab-9a259ef91b44", title: "The burbz", path: "public/1584106997200-astronomy-space-abstract-galaxy.jpg", description: "theone23"), Test.Post(id: "922f6ffc-8738-4bc2-a96d-654678540f5a", title: "Test", path: "public/1584045867007-71188186_249463072641040_8764351972645011456_n.jpg", description: "PLus that"), Test.Post(id: "45ef0279-6179-43b3-8a45-7a0fb4acefd5", title: "The burbz", path: "public/1584040897839-smiley.png", description: "OCtober"), Test.Post(id: "fa3d34ed-325b-479e-8b8f-c59831f0790d", title: "The burbz", path: "public/1584040654626-home-icon.jpg", description: "theone23"), Test.Post(id: "7c35e1ee-28e0-4845-bd14-dcad27025b04", title: "The burbz", path: "public/1584039156755-add.png", description: "theon23"), Test.Post(id: "f1567e48-eb24-4ccc-b24d-6c7c9c99e326", title: "dff", path: "public/1584038265741-Profile-img-icon.png", description: "YETT"),...

Вот как я получаю данные:

Извлекаю данные из моего URL

class Webservice {
    func getAllPosts(completion: @escaping ([Post]) -> ()) {
        guard let url = URL(string: "http://localhost:8000/albums")
     else {
     fatalError("URL is not correct!")
    }

        URLSession.shared.dataTask(with: url) { data, _, _ in

            let posts = try!

                JSONDecoder().decode([Post].self, from: data!); DispatchQueue.main.async {
                    completion(posts)
            }
        }.resume()
    }
}

Переменные

struct Post: Codable, Hashable, Identifiable {

    let id: String
    let title: String
    let path: String
    let description: String
}

Установите переменные для сообщений от завершения (posts)

final class PostListViewModel: ObservableObject {

    init() {
        fetchPosts()
    }

    @Published var posts = [Post]()

    private func fetchPosts() {
        Webservice().getAllPosts {
            self.posts = $0
        }
    }


}

Мой вопрос заключается в том, как щелкнуть элемент из списка по идентификатору или что я могу сделать, чтобы перейти к просмотру каждого элемента из списка по идентификатору и отобразить все содержимое с помощью ID.

1 Ответ

0 голосов
/ 17 марта 2020

Я следовал информации от Apple о том, как создавать списки с навигацией здесь: https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation, и это сработало. Спасибо, Apple.

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