首页 > 解决方案 > 将观察者从 ViewController 移动到 ViewModel

问题描述

我只是在观察网络状态,并在 Internet 连接丢失时通知用户!它可以工作,但是,我想在 ViewModel 中处理观察者并向 ViewController 发送警报。我将如何实现它?

NetworkManager类

public protocol NetworkObserver: class {
  func networkStatusChanged(status: NWPath.Status)
}

public extension NetworkObserver where Self: UIViewController {
  func statusDidChange(status: NWPath.Status) {
    if status != .satisfied {
      self.showAlert(message: "No Internet")
    }
  }
}

final class NetworkCheckManager {
  
  struct NetworkChangeObservation {
    weak var observer: NetworkObserver?
  }
  public static let shared = NetworkCheckManager()
  private var observations = [ObjectIdentifier: NetworkChangeObservation]()
  // I didnt add the entire code here!! 
}

视图模型

final class ViewModel {
  // trying to make the following private
  let networkCheckManager: NetworkCheckManager

  init(
    networkCheckManager: NetworkCheckManager = .shared
  ) {
    self.networkCheckManager = networkCheckManager
  }
}

视图控制器

final class ViewController: UIViewController, NetworkObserver {
  let vm = ViewModel()
  
  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    vm.networkCheckManager.addObserver(observer: self)
  }
}

标签: iosswift

解决方案


推荐阅读