首页 > 解决方案 > MVC 模型中的动态链接

问题描述

在此示例中,如何随时发送动态链接到服务类,在此更新视图之后,我随时收到链接,我不想使用通知等

  1. 看法

    var viewModel = HomeViewModel()
    
     func configureViewModel() {
         viewModel.resultClosure = { [weak self] listModel in
             guard let image = listModel.uiImage else { return }
             self?.updateImageViewConstraint(nil, image: image)
         }
     }
    
  2. 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
             }
         }
     }
    

    }

  3. 服务 - 这里我需要检查动态链接

    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 ))
             }
         }
     }
    }
    
  4. 模型

    struct ListModel {
    
     let imageUrl: String?
     let uiImage: UIImage?
    }
    
  5. 构造我需要在视图中显示的任何时间动态链接。在这里提问!如何发送服务链接和更新视图???

    struct GetManager {
     static func showContent(pasteboard: String) {
     switch onlyLinkAbsoluteString.validURL {
            case true:
     // How to Send Link to Services and update View???
     }
     }
     }
    

标签: swiftmodel-view-controllerstruct

解决方案


在 MVVM/MVC 通信中应该走这条路

视图 > ViewModel > 管理器 > 服务

在 ViewModel 中创建 Manager 实例,在 Manager 中创建 Service 实例

您在 ViewModel 中调用 Manager 的函数,Manager 将处理与您的 Service 的通信。


推荐阅读