私はタイマーとして動作するクラスTimerを持っているとしましょう。スーパークラスのNSTimerコール関数
タイマーのように動作することができる他のすべてのクラスに、タイマータイプの属性が必要です。
問題は、TimerクラスがNSTimer属性を使用していて、タイマーの外部から関数を関連付ける方法がわかりません。
たとえば、クラスAには属性B(Timer)があります。 scheduledTimerWithTimerIntervalはどのようにAの関数を呼び出すことができますか? ViewControllerを
ここimport UIKit
class Timer{
var interval: NSTimeInterval!
var counting: Bool = false
var numberOfTouches: Int = 0
private var timer: NSTimer = NSTimer()
init(interval: CGFloat){
self.interval = NSTimeInterval(interval)
self.counting = false
}
func Start(function: String) {
if(self.counting){
self.numberOfTouches += 1
self.timer.invalidate()
self.timer = NSTimer.scheduledTimerWithTimeInterval(self.interval, target: self, selector: Selector(function), userInfo: nil, repeats: false)
}
else{
self.counting = true
self.numberOfTouches = 1
}
}
func Stop(){
if(!self.counting){
self.counting = false
}
}
}
は次のとおりです:ここで
はタイマーで最後に
import UIKit
class ViewController: UIViewController {
var timer: Timer = Timer(interval: 1.0)
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func Trigger(sender: AnyObject) {
//yes, this doesn't call t() from the ViewController
timer.Start("self.t")
}
func t(){
label.text = String(timer.numberOfTouches)
}
@IBOutlet weak var label: UILabel!
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
、このタイマーが何をしようとするものである:
- 私はボタンを押す、それカウントを開始し、タッチ数を1に設定します。
- 触れてから1秒以内にもう一度押すと、1秒タイマーが再起動し、タッチが1増加します。
- 触れずに1秒後、ViewControllerからt()を呼び出してラベルを最後のタッチ数に設定する必要があります。
これを解決するにはどうすればよいですか?
ありがとうございました!
PS:初めに、それはそれは、あなたがターゲットとして、オブジェクトを供給しない"self.t"
のselector( "停止")
どうすればいいですか? Start(var vc:ViewController)にパラメータを追加し、Selector( "vc.t")を使用する必要がありますか? – Daniel
私はスタートがターゲットとセレクタを取るべきだと思います。セレクタは "t"または "ViewController.t"のいずれかであり、間違いなく "vc.t"ではありません。 - "vc"はTimerにとってまったく知られていない変数の名前です。セレクタはオブジェクトに適用されますターゲットとして渡す。 –