swift - MVC 模型中的动态链接
问题描述
在此示例中,如何随时发送动态链接到服务类,在此更新视图之后,我随时收到链接,我不想使用通知等
看法
var viewModel = HomeViewModel() func configureViewModel() { viewModel.resultClosure = { [weak self] listModel in guard let image = listModel.uiImage else { return } self?.updateImageViewConstraint(nil, image: image) } }
HomveViewModel
class HomeViewModel { var service = Services() var listModel = [ListModel]() { didSet { DispatchQueue.main.async { [weak self] in guard let self = self else { return } self.resultClosure?(self.listModel[0]) } } } let placeholderImage = UIImage(named: "placeholder") var updatedImge : UIImage? var resultClosure: ((ListModel) -> Void)? var stringUrl: StringUrl! func fetchData() { service.makeRequest() { (result: Result<[ListModel]>) in switch result { case .success(let listModel): self.listModel = listModel return case .failure(let error): print("\n HomeViewModel fetchData failure \(error) \n") return } } }
}
服务 - 这里我需要检查动态链接
class Services { let urlSession: URLSession let imageProvider = ImageProvider() let dynamicLinkfromStruct = "Dynamic Link From Struct!!!" init(urlSession: URLSession = .shared) { self.urlSession = urlSession } func makeRequest(completionHandler: @escaping (Result<[ListModel]>) -> Void) { guard let url = URL(string: dynamicLinkfromStruct) else { return } imageProvider.loadImages(from: url) { (image) in do { let result = [ListModel.init(imageUrl: self.url, uiImage: image)] completionHandler(.success(result)) } catch { completionHandler(.failure(error )) } } } }
模型
struct ListModel { let imageUrl: String? let uiImage: UIImage? }
构造我需要在视图中显示的任何时间动态链接。在这里提问!如何发送服务链接和更新视图???
struct GetManager { static func showContent(pasteboard: String) { switch onlyLinkAbsoluteString.validURL { case true: // How to Send Link to Services and update View??? } } }
解决方案
在 MVVM/MVC 通信中应该走这条路
视图 > ViewModel > 管理器 > 服务
在 ViewModel 中创建 Manager 实例,在 Manager 中创建 Service 实例
您在 ViewModel 中调用 Manager 的函数,Manager 将处理与您的 Service 的通信。
推荐阅读
- javascript - react setState 是异步函数吗?
- python - 图形 API 安全警报属性为空白或 GUID
- ibm-cloud - IBM 是否向 Watson Visual Recognition 付费?
- ios - SwiftUI EditButton() 错误
- python - 条件 Django 表单验证
- regex - 使用正则表达式从具有已知前缀的字符串中提取多个单词
- javascript - 在javascript中转换为e+的脚本
- qt - 基于 CMake 的项目,在运行时加载了自定义 QML 插件,仅使用 MinGW 失败
- snakemake - Snakemake 中的 CalledProcessError
- json - 通过 json 的 jquery 循环无法按预期工作