NSTimer не находит селектор
Я хочу использовать NSTimer в классе, который не наследуется от UIViewVontroller. У меня есть 2 файла: ViewController и TimerClass:
ViewController:
import UIKit
class ViewController: UIViewController {
var timerClass = TimerClass()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
timerClass.launchTimer()
}
}
TimerClass:
import Foundation
class TimerClass {
var timer = NSTimer()
init(){}
func launchTimer(){
var timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "timerEnd", userInfo: nil, repeats: true)
}
func timerEnd(){
println("That worked")
}
}
Когда я запускаю это приложение, у меня сбой:
2015-01-12 19: 48: 24.322 Timer_TEST [5829: 185651] *** NSForwarding: предупреждение: объект 0x7fbc3be20710 класса "Timer_TEST.TimerClass" не реализует методSignatureForSelector: - проблема впереди
Непризнанный селектор - [Timer_TEST.supportFile timerEnd]
Любая идея?
Спасибо
Ответы
Ответ 1
EDIT: Обратите внимание, что, начиная с Swift 2.2, вы не сможете сделать эту ошибку! Вы будете использовать новый синтаксис #selector
(см. fooobar.com/info/22333/...), и компилятор не позволит вам сформировать селектор для метода, который не отображается до Objective-C.
Это просто вопрос об открытии функции Swift Objective-C, чтобы она была видна Objective-C. У вас есть четыре варианта:
-
Создайте TimerClass из NSObject (и удалите реализацию init
):
class TimerClass : NSObject {
-
Объявить TimerClass с помощью @objc
[не в Swift 2.0; используйте предыдущий выбор]:
@objc TimerClass {
-
Объявите функцию с помощью @objc
:
@objc func timerEnd()
-
Объявите функцию dynamic
(это, вероятно, самый худший вариант, поскольку это необязательно - функция не динамическая, ее не нужно изменять на месте Objective-C, она просто должна быть виден):
dynamic func timerEnd(){