【发布时间】:2019-10-18 10:07:02
【问题描述】:
我需要在我的每个 ViewController 的 viewDidLoad 上发布通知。我有一个带有postNotification 方法的 BaseViewController,它获取一个枚举作为参数来识别屏幕。看起来是这样的
class BaseViewController {
func postNotification(for screen: ScreenName) {
NotificationCenter.default.post(name: notification,
object: nil,
userInfo: ["ScreenName": screen])
}
}
class AViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
postNotification(for: screenA)
}
}
class BViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
postNotification(for: screenB)
}
}
假设我们以后需要添加另一个视图控制器,例如CViewController。我想强制CViewController 的开发者用屏幕枚举调用这个postNotification 方法。
在 Swift 上实现这一目标的最佳实践是什么?
编辑
感谢 Loren 的建议,我在我的基类上添加了一个协议
typealias BaseController = BaseViewController & BaseProtocol
protocol BaseProtocol {
var screenName: ScreenName { get }
}
这会强制我所有的视图控制器遵守协议并初始化screenName,但现在我无法从我的BaseViewController 获取它。如果我可以从BaseViewController 获取子视图控制器的screenName 属性,我将消除对每个子视图调用postNotification 方法,并且只在BaseViewController 上调用它
【问题讨论】:
-
这个链接有帮助吗(大约 3/4 下降)? stackoverflow.com/questions/24111356/…
-
嘿,谢谢!它有点帮助,但产生了另一个问题。我相应地更新了我的问题