Parametr object
w funkcji, której używasz, to nadawca, obiekt publikujący powiadomienie, a nie parametr. Sprawdź dokumentację: here.
Należy umieścić wartość enum chcesz wysłać jako parametr w słowniku Informacja o użytkowniku i używać w następujący sposób:
func postNotificationName(_ aName: String,
object anObject: AnyObject?,
userInfo aUserInfo: [NSObject : AnyObject]?)
W twoim przypadku:
let userInfo = ["RuleError" : RuleError.Create.rawValue]
NSNotificationCenter.defaultCenter().postNotificationName("RuleFailNotification",
object: self,
userInfo:userInfo)
I do obsługi powiadomienie, najpierw zarejestruj się:
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "handleRuleFailNotification:",
name: "RuleFailNotification",
object: nil)
Następnie obsłuż go:
func handleRuleFailNotification(notification: NSNotification) {
let userInfo = notification.userInfo
RuleError(rawValue: userInfo!["RuleError"] as! String)
}
Jest to niefortunne koniecznością. Powiadomienia wymuszają wyliczenia i struktury na status drugiej klasy. Uważam, że jest to poważny problem w Swift, ponieważ Enums są często ograniczonym int lub stringiem, a mimo to są w porządku jako wartość. – BaseZen