NSTimer 找不到选择器

NSTimer doesn't find selector

我想在 class 中使用不继承自 UIViewVontroller 的 NSTimer。我有 2 个文件:一个 ViewController 和一个像这样的 TimerClass :

ViewController:

import UIKit

class ViewController: UIViewController {

    var timerClass = TimerClass()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidAppear(animated: Bool) {
        timerClass.launchTimer()
    }

}

定时器类:

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: 警告: class 'Timer_TEST.TimerClass' 的对象 0x7fbc3be20710 未实现methodSignatureForSelector: -- 前面有麻烦 无法识别的选择器 -[Timer_TEST.supportFile timerEnd]

有什么想法吗?

谢谢

编辑: 请注意,从 Swift 2.2 开始,您将无法再犯此错误!您将使用新的 #selector 语法(参见 ),并且编译器不会让您为未公开给 Objective-C.[=20 的方法形成选择器=]


这只是将 Swift 函数公开给 Objective-C 以便 Objective-C 可见的问题。您有四个选择:

  • 使 TimerClass 继承自 NSObject(并删除 init 实现):

    class TimerClass : NSObject {
    
  • @objc 声明 TimerClass [不在 Swift 2.0 中;使用之前的选择]:

    @objc TimerClass {
    
  • @objc声明函数:

    @objc func timerEnd()
    
  • 声明函数 dynamic(这可能是最糟糕的选择,因为它是不必要的 - 该函数 不是 动态的;它不需要通过 Objective-C 就地更改,它只需要可见):

    dynamic func timerEnd(){