ios - 将观察者从 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)
}
}
解决方案
推荐阅读
- azure-devops - 发布管道 - 手动状态覆盖
- c# - HanaDecimal 没有可序列化的属性
- c++ - 使用对象内的大量数据容器进行更有效的对象交换
- wpf - 从控制器/模型创建 Viewmodel。从数据库填充列表
- r - 在 R 中的表中显示选定的变量
- mysql - 如何通过提供员工 ID 从表中获取数据
- mysql - 连续行之间每人的时间差
- ios - 如何/何时将 IAP 信息添加到 iOS 应用收据?
- excel - vlookup 没有获得所需的数据。有两个具有共同设计编号的表
- image-processing - 如何将具有未知配置文件的 CMYK tif 转换为 png (RBG)?