From f2bf132d6df251ea7d5224d0d86c2ca5b0c02320 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Wed, 15 May 2024 09:38:05 +0300 Subject: Integrate feeds from good old `tst` 2019 project --- JuickNext/MessageFetcher.swift | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 JuickNext/MessageFetcher.swift (limited to 'JuickNext/MessageFetcher.swift') diff --git a/JuickNext/MessageFetcher.swift b/JuickNext/MessageFetcher.swift new file mode 100644 index 0000000..565cca0 --- /dev/null +++ b/JuickNext/MessageFetcher.swift @@ -0,0 +1,39 @@ +// +// 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() + } +} -- cgit v1.2.3