Как реализовать обратный вызов / селектор с функцией performSelector в swift?

Я пытаюсь создать эквивалент ниже подписи метода (Objective-C) в быстром языке. Я не мог получить ответ о том, как получить правильный эквивалент для этого. Любая помощь высоко ценится.

- (void)myMethod:(MyObject*)firstParam setCallbackObject:(id)obj withMySelector:(SEL)selector { [obj performSelector:selector withObject:nil afterDelay:0] } 

Первый:

ЗАМЕТКА

Метод performSelector: метод и связанные с ним методы выбора не импортируются в Swift, потому что они по своей сути являются небезопасными.

Если вы все еще хотите реализовать его таким образом, прочтите ниже.


Вы можете использовать NSTimer :

 var myTimer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.0, target: self, selector: "selectorMethod", userInfo: nil, repeats: false) 

Строка может использоваться там, где требуется Selector . Он будет автоматически преобразован (автобоксинг).

Задержка может быть, конечно, выше: 0,1 равно 1 десятой секунды.

Чтобы вызвать метод, например:

 func selectorMethod() { ... } 

Нам нужно проверить перед использованием селектора в классе. Но respondsToSelector: находится в протоколе NSObject , поэтому вам нужно вывести хотя бы из этого (или из этого подкласса из него).

Чтобы это было ясно, вот пример.

Код:

 class Test { func myMethod(firstParam: String, setCallbackObject obj: AnyObject, withMySelector selector: Selector) { if obj.respondsToSelector(selector) { var myTimer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.0, target: obj, selector: selector, userInfo: nil, repeats: false) myTimer.fire() } else { println("Warning: does not respond to given selector") } } } class Test2: NSObject { func selectorMethod() { print("worked") } } var test: Test = Test() var callBackObj: Test2 = Test2() test.myMethod("thisfirstis", setCallbackObject: callBackObj, withMySelector: Selector("selectorMethod")) 

Вывод:

workProgram закончил с кодом выхода: 0

  • Неверные удаленные данные, когда enableLocalDatastore с Parse
  • Как преобразовать формат даты с dd / MM / YYYY в YYYY-MM-dd в быстром
  • Простой пример UIGestureRecogniser с ReactiveCocoa 4
  • AWS SDK для iOS: невозможно перечислить файлы в ведро S3
  • Сохранять текущий список сообщений пользователя в сеансе с быстрым
  • Как сделать UITextField полной ширины в Swift
  • Движение во время экрана / управления коснулось
  • Индикатор остановки активности после загрузки UITableView
  • Как установить UIImageView в центре экрана по горизонтали или вертикали с помощью Swift, но не более StoryBoard
  • Можем ли мы установить локальное изображение в автономное изображение SDWebImage?
  • Почему обработчик завершения NSSession dataTaskWithRequest использует неявно развернутый необязательный параметр ошибки?
  • Давайте будем гением компьютера.