MVVM Asyn c UIImage загрузка из сети на iOS Swift - PullRequest
1 голос
/ 17 марта 2020

Я использую MVC с момента моего первого приложения на iOS ... теперь я хочу попробовать MVVM.

Мой подход заключается в том, что модель может содержать удаленный URL, а ViewModel делает Просьба загрузить изображение. (затем нажимаем на связанное представление) ... Я думаю, что это подходит для того, чтобы не делать сетевой запрос в представлениях (или в худших ячейках!)

class Person: NSObject {
    var firstName: String?
    var lastName: String?
    var avatarURL: URL?
}
class PersonEntryViewModel {
    var name:String?
    var avatarImage:UIImage?

    init(person: Person?) {
        super.init()
        // omitted: binding self.name based on person.firstName & person.lastName
        var request: URLRequest? = nil
        if let avatarURL = person?.avatarURL {
            request = URLRequest(url: avatarURL)
        }
        fetchImageFromNetwork({ response, data in
            if let data = data {
                avatarImage = UIImage(data: data)
            }
        })
    }
}

Как вы думаете?

Мое сомнение связано с памятью. Я мог бы иметь большой массив моделей, заполненных UIImages ...

1 Ответ

0 голосов
/ 18 марта 2020

Если каждая ячейка содержит свой собственный PersonEntryViewModel, и это отбрасывается в процессе подготовки к повторному использованию ячейки, то память не является проблемой, потому что изображения будут отбрасываться одновременно.

Я думаю, что было бы лучше не помещать код загрузки в метод init. Лучше было бы иметь какой-то метод триггера, который можно вызвать, когда модель представления передается в ячейку.

Это действительно зависит от того, как выглядит более крупная архитектура.

Если вы хотите см. некоторые примеры обработки изображений в приложении Rx-MVVM- C. В слабом канале RxSwift есть несколько замечательных примеров:

https://rxswift.slack.com/archives/CTSAM9V27/p1583148003073800 https://rxswift.slack.com/archives/CTSAM9V27/p1583149698079500

Присоединяйтесь к обсуждению, зайдя сюда: https://rxslack.herokuapp.com

...