2016-07-28 3 views
2

У меня есть SKScene, который делает себя наблюдателем извещения с именем «showPhotoForMoodNotification» с ассоциированным селектором, называемым «eventListenerDidReceiveNotification:».как использовать селектор: с функцией, которая выбрасывает исключение в Swfit

eventListenerDidReceiveNotification объявляется как функция, которая может бросить и исключение следующим образом:

func eventListenerDidReceiveNotification(notif:NSNotification) throws { } 

Но я заметил, что, когда уведомление получено SKScene, компилятор не связывает подпись этого " «метод с подписью„eventListenerDidReceiveNotification селектора“в addObserver называется, который выглядит как thisL

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

Погрешность я получаю это: enter image description here

Итак, я предполагаю, что часть «throw» подписи метода несовместима с «селекторной» частью вызова nsnotification «addObserver», потому что если я исключил часть «throws» из «eventListenerDidReceiveNotification» «Объявление метода, все работает.

Так что я должен добавить что-нибудь еще к части «selector» addObserver, чтобы описать этот метод как метод, который генерирует исключение?

благодаря

ответ

0

Возможный ответ here. BTW, в Swift 2.2 (на самом деле, я не знаю, какую версию вы используете) есть new syntax for selectors, который рекомендуется использовать. (IBAction подключен к кнопке TouchUpInside событие в раскадровке)

На самом деле, я просто проверял этот код и он работал:

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 методы, такие как

func f(x: T) throws -> U 

рассматриваются в Objective C как

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

Итак, вы можете попробовать добавить это error: в вашем селекторе.

EDIT:

И

func f() throws -> U 

Становится

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