I need to post a notification on viewDidLoad of every one of my ViewControllers. I have a BaseViewController with a postNotification method, and it gets an enum as a parameter to identify the screen. It looks like this
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)
    }
}
Suppose we need to add another view controller later in the future, such as CViewController. I want to force the developer of CViewController to call this postNotification method with screen enum. 
What is the best practice to achieve this on Swift?
Edit
Thanks to Loren's suggestion, I added a protocol on my base class
typealias BaseController = BaseViewController & BaseProtocol
protocol BaseProtocol {
    var screenName: ScreenName { get }
}
This forces all my viewcontrollers to conform protocol and initialize screenName, but now I can't get it from my BaseViewController. If I can get child view controller's screenName property from BaseViewController, I would eliminate calling postNotification method on each child, and call it only on BaseViewController
 
    