2016-07-28 22 views
2

Ich habe eine SKScene, die selbst Beobachter einer Benachrichtigung namens "showPhotoForMoodNotification" mit einem zugeordneten Selektor namens: "eventListenerDidReceiveNotification:".wie Selektor zu verwenden: mit Funktion, die Ausnahme in Swfit wirft

Die eventListenerDidReceiveNotification als Funktion erklärt, die wie folgt werfen und Ausnahme kann:

func eventListenerDidReceiveNotification(notif:NSNotification) throws { } 

Aber ich bemerkte, dass, wenn die Benachrichtigung durch den SKScene empfangen wird, wird der Compiler nicht die Unterschrift dieses assoziieren " eventListenerDidReceiveNotification“Methode mit der Unterzeichnung des‚Wähler‘im addObserver genannt, die wie thisL

NSNotificationCenter.defaultCenter().addObserver(self, selector: "eventListenerDidReceiveNotification:", name: "showPhotoForMoodNotification", object: nil) 

der Fehler ist das i bekommen aussieht: enter image description here

Also, meine Vermutung ist, dass die "Würfe" Teil der Signatur der Methode ist nicht kompatibel mit dem "Selektor" Teil der nsnotification "addObserver" Aufruf, denn wenn ich den "Würfe" Teil aus der "eventListenerDidReceiveNotification "Methodendeklaration, Dinge funktionieren.

Also muss ich etwas mehr hinzufügen, um den "Selektor" Teil von addObserver, um diese Methode als eine Methode zu beschreiben, die eine Ausnahme auslöst?

dank

Antwort

0

Mögliche Antwort here. BTW, in Swift 2.2 (eigentlich weiß ich nicht, welche Version Sie verwenden) gibt es new syntax for selectors, die empfohlene Art, es zu verwenden. (IBAction verbunden Taste TouchUpInside Ereignis in Storyboard)

Eigentlich habe ich diesen Code nur getestet und es funktionierte:

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(test(_:)), name: "TestNotification", object: nil) 
} 

@objc private func test(notification: NSNotification) throws { 
    print("notification") 
} 

@IBAction private func fireNotification() { 
    NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: nil) 
} 
0

IIRC, Swift Methoden wie

func f(x: T) throws -> U 

in Objective C betrachtet werden als

- (nullable U *)fWithX:(T *)x error:(NSError **)errorPtr; 

So können Sie versuchen, dasshinzufügen 0 Teil in Ihrem Selektor.

EDIT:

Und

func f() throws -> U 

Wird

- (nullable U *)fAndReturnError:(NSError **)errorPtr;