MVVM异步UIImage在iOS Swift上从网络加载



自从我在iOS上的第一个应用程序以来,我一直在使用MVC。。。现在我想试试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填充大量视图模型。。。

如果每个单元都有自己的PersonEntryViewModel,并且在单元准备重用时被丢弃,那么内存就不是问题,因为图像会同时被丢弃。

我认为最好不要将下载代码放在init方法中。最好是有某种触发器方法,当视图模型传递到单元格时可以调用。

这实际上取决于更大的体系结构是什么样子的。

如果你想在Rx-MVVM-C应用程序中看到一些处理图像的例子,RxSwift松弛通道中有几个很棒的例子:

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

点击此处加入讨论:https://rxslack.herokuapp.com

最新更新