// // MessageFetcher.swift // tst // // Created by Vitaly Takmazov on 10.12.2019. // Copyright © 2019 com.juick. All rights reserved. // import Foundation import Combine class MessageFetcher: ObservableObject { @Published var state: LoadableState = .loading init(url: String) { guard let apiUrl = URL(string: url) else { state = .fetched(.failure(.error("Malformed API URL."))) return } URLSession.shared.dataTask(with: apiUrl) { [weak self] (data, _, error) in if let error = error { self?.state = .fetched(.failure(.error(error.localizedDescription))) return } guard let data = data else { self?.state = .fetched(.failure(.error("Malformed response data"))) return } let root = try! JSONDecoder().decode(Root.self, from: data) DispatchQueue.main.async { [weak self] in self?.state = .fetched(.success(root)) } }.resume() } }