Совместное использование одной и той же функции между двумя моделями представления?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Совместное использование одной и той же функции между двумя моделями представления?

Сообщение Anonymous »

У меня есть представление, которое я использую в своем приложении на различных страницах. В представлении отображается изображение и метка, в данном случае название города.

Код: Выделить всё

import SwiftUI
import Kingfisher

struct CityView: View {
@EnvironmentObject private var cityViewModel: CityViewModel

@Binding var city: City

var body: some View {
NavigationLink(destination: CityDetailView(cityId: city.id)) {
VStack {
KFImage(URL(string: city.photoUrl ?? ""))
.resizable()
.background(Color.white)

Text(city.name)
}
}
}
}
Теперь, если ответ API отправляет нулевое изображение, я хочу вызвать отдельную конечную точку для получения URL-адреса изображения. В настоящее время эта конечная точка настроена на получение URL-адреса стандартной фотографии и его возврат.
Сейчас у меня есть две разные страницы:
  • Страница со списком случайных городов
  • Страница профиля со списком городов, сохраненных пользователем
Для страницы, на которой показан список случайных городов, у меня есть следующий вид: модель:

Код: Выделить всё

class CityViewModel: ObservableObject {
let cityService: CityServiceProtocol

@Published var cities: [City] = []

func fetchPhoto(cityId: Int) async {
do {
let data = try await cityService.getPhoto(cityId: cityId)
guard let photoUrl = data.data?.photoUrl else { return }

// Update the image url
if let index = self.cities.firstIndex(where: { $0.id == cityId }) {
self.cities[index].photoUrl = photoUrl
}
} catch {
print("Failed")
}
}
}
Как видите, у меня уже есть функция fetchPhoto(), которая обновляет URL-адрес изображения города после возврата.
Для на странице профиля, на которой отображается список городов, сохраненных пользователем, у меня есть следующая модель представления:

Код: Выделить всё

class ProfileViewModel: ObservableObject {
let profileService: ProfileServiceProtocol

@Published var savedCities: [City] = []

// excluded function that fetches saved cities from the api
}
Я столкнулся с проблемой: если пользователь переходит к своему профилю, чтобы просмотреть сохраненные города, а у города нет URL-адреса изображения, в настоящее время его нет. получить изображение из API.
Если я хочу сохранить эту структуру использования двух моделей представления, придется ли мне копировать функцию fetchPhoto() из CityViewModel в ProfileViewModel, или можно ли иметь одну функцию это обновляет обе модели представления?

Подробнее здесь: https://stackoverflow.com/questions/792 ... iew-models
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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