Как работает сетевой уровень в Swift 5 и Xcode 11 - PullRequest
0 голосов
/ 09 октября 2019

Уже два дня обучения тому, как создать собственный сетевой уровень для извлечения данных с сервера с использованием API и декодера json

Но после двух дней многих уроков в Интернете я не могу найти, что происходит после создания сетевого слояв Swift 5

я получаю данные json в виде print(data) в файле класса serviceLayer, но не могу распечатать данные в представлении списка SwiftUI?

вот файл serviceLayer.swift

import Foundation

class ServiceLayer {
    // 1.
    class func request<T: Decodable>(router: Router, completion: @escaping (Result<[String: [T]], Error>) -> ()) {
        // 2.
        var components = URLComponents()
        components.scheme = router.scheme
        components.host = router.host
        components.path = router.path
        components.queryItems = router.parameters
        // 3.
        guard let url = components.url else { return }
        var urlRequest = URLRequest(url: url)
        urlRequest.httpMethod = router.method
        // 4.
        let session = URLSession(configuration: .default)
        let dataTask = session.dataTask(with: urlRequest) { data, response, error in
            // 5.
            guard error == nil else {
                completion(.failure(error!))
                print(error?.localizedDescription)
                return
            }
            guard response != nil else {
                return
            }
            guard let data = data else {
                return
            }
            // 6.
            let responseObject = try! JSONDecoder().decode([String: [T]].self, from: data)
            // 7.
            DispatchQueue.main.async {
                // 8.
                completion(.success(responseObject))
            }
        }
        dataTask.resume()
    }
}

А вот модель, которую я использую

 struct CollectionItem: Decodable {
    let title: String
    let id: Int
}
...