How do you create custom notifications in Swift 3?
In Objective-C, a custom notification is just a plain NSString, but it's not obvious in the WWDC version of Swift 3 just what it should be.
There is a cleaner (I think) way to achieve it
extension Notification.Name {
static let onSelectedSkin = Notification.Name("on-selected-skin")
}
And then you can use it like this
NotificationCenter.default.post(name: .onSelectedSkin, object: selectedSkin)
You could also use a protocol for this
protocol NotificationName {
var name: Notification.Name { get }
}
extension RawRepresentable where RawValue == String, Self: NotificationName {
var name: Notification.Name {
get {
return Notification.Name(self.rawValue)
}
}
}
And then define your notification names as an enum
anywhere you want. For example:
class MyClass {
enum Notifications: String, NotificationName {
case myNotification
}
}
And use it like
NotificationCenter.default.post(name: Notifications.myNotification.name, object: nil)
This way the notification names will be decoupled from the Foundation Notification.Name
. And you will only have to modify your protocol in case the implementation for Notification.Name
changes.