Проблема с передачей данных из вызова API в шаблоне SwiftUI MVVM.IOS

Программируем под IOS
Ответить
Anonymous
 Проблема с передачей данных из вызова API в шаблоне SwiftUI MVVM.

Сообщение Anonymous »

Я пытался разобраться в этом, прежде чем публиковать сообщение, но все еще натыкался на стену.
Создал специальный класс API, ViewModel и View и попытался передать данные обратно и и хотя я вижу, что вызов API успешен, и я без проблем декодирую его в журналах, это никогда не отражается на пользовательском интерфейсе или представлении.
Насколько я понимаю, я пытаюсь получить доступ к данным до того, как они станут действительно доступны. Будем признательны за всю помощь!
Класс API:
import Combine
import Foundation

class CrunchbaseApi:ObservableObject
{
@Published var companies:[Company] = [Company]()
@Published var singleCompany:Company?

func retrieve(company:String) async
{
let SingleEntityURL:URL = URL(string:"https://api.crunchbase.com/api/v4/entit ... ***REMOVED FOR SECURITY*****************")!

let task = URLSession.shared.dataTask(with:SingleEntityURL){ data, response, error in

let decoder = JSONDecoder()

if let data = data{
do {
self.singleCompany = try decoder.decode(Company.self, from: data)
} catch {
print(error.localizedDescription)
}
}
}
task.resume()
}

func retrieveCompanyList()
{
//declare
}
}

ViewModel:
import Combine
import Foundation

class CompanyViewModel: ObservableObject
{
var crunchbase:CrunchbaseApi = CrunchbaseApi()
@Published var singleCompany:Company?

func retrieveCompany(company:String) async
{
await self.crunchbase.retrieve(company: company)
self.singleCompany = crunchbase.singleCompany

}

}

Просмотр:
import SwiftUI

struct CompanyView: View
{
@State var companyViewModel:CompanyViewModel = CompanyViewModel()

var body: some View
{

NavigationView
{
VStack
{
Text("Company ID: \(companyViewModel.singleCompany?.id ?? "NOTHING")")
// Text("Company Name: \(companyViewModel.companyName)")
// Text("Company Summary: \(companyViewModel.companyDescription)")
// Text("Logo URL: \(companyViewModel.companyLogoURL)")
}.navigationTitle("Company")
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/734 ... vm-pattern
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»