как использовать селектор: с функцией, которая выдает исключение в Swfit

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

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

func eventListenerDidReceiveNotification(notif:NSNotification) throws { }

Но я заметил, что когда уведомление получено SKScene, компилятор не связывает сигнатуру этого метода «eventListenerDidReceiveNotification» с сигнатурой «селектора» в вызываемом addObserver, который выглядит так:

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

Я получаю следующую ошибку: введите здесь описание изображения

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

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

спасибо


person malena    schedule 28.07.2016    source источник


Ответы (2)


Возможный ответ здесь. Кстати, в Swift 2.2 (на самом деле я не знаю, какую версию вы используете) есть новый синтаксис для селекторов, рекомендуемый способ его использования. (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)
}
person Maksym Musiienko    schedule 21.10.2016

IIRC, методы Swift, такие как

func f(x: T) throws -> U

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

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

Поэтому вы можете попробовать добавить эту часть error: в свой селектор.

РЕДАКТИРОВАТЬ:

И

func f() throws -> U

становится

- (nullable U *)fAndReturnError:(NSError **)errorPtr;
person user28434'mstep    schedule 21.10.2016