如何为全局类添加提示消息?重构弹窗代码的类设计疑问
重构重复弹窗代码的全局类方案
一、命名建议
推荐用**AlertPresenter或者GlobalAlertManager**这类名字——它们清晰传达了这个类的核心职责:专门负责弹窗的展示逻辑,是个工具类/管理器,而不是一个新的页面控制器。
二、是否需要继承UIViewController?
完全不需要!
咱们要的是一个复用弹窗逻辑的工具,不是一个具备页面生命周期的视图控制器。如果继承UIViewController,反而会引入不必要的生命周期管理、层级维护成本,违背了单一职责原则。这个类只需要专注于「接收当前控制器、创建并展示弹窗」这件事就够了。
三、实现思路与示例
可以把这个类做成单例(保证全局唯一实例),提供实例方法接收当前的UIViewController作为参数,这样弹窗就能以这个VC为父控制器展示。点击“OK”后弹窗消失,自然就回到原VC,不需要额外处理返回逻辑。
举个Swift的简单实现例子:
class AlertPresenter { // 单例模式,全局唯一实例 static let shared = AlertPresenter() // 私有化构造器,防止外部创建实例 private init() {} // 封装错误弹窗的展示方法 func showErrorAlert(on viewController: UIViewController, title: String = "错误", message: String) { let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default) { _ in // 如果需要弹窗消失后的额外逻辑,可以在这里添加 // 默认情况下,弹窗dismiss后就回到调用的原ViewController了 } alert.addAction(okAction) viewController.present(alert, animated: true) } }
在任意ViewController里使用时,只需要一行代码:
// 在当前VC中调用,弹窗就会以当前VC为父展示 AlertPresenter.shared.showErrorAlert(on: self, message: "加载失败,请稍后重试")
这样既完成了代码复用,又完全满足你的需求:弹窗依附当前VC,点击OK后回到报错所在的原页面。
内容的提问来源于stack exchange,提问作者Maria 9905
相关产品推荐
相关产品推荐

