2014-07-04 47 views
0

我在一个类中创建了一个定时器,并尝试在定时器工作时在另一个类中执行其他操作,并在定时器停止时执行其他操作。例如,当计时器工作时每秒显示一次。我简化了代码如下。如何实现这一点?如何在IOS中同步Swift语言中的不同动作

import Foundation 
import UIView 

class TimerCount { 
var timer: NSTimer! 
var time: Int! 
init(){ 
    time = 5 
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0 , target: self, selector: Selector("update"), userInfo: nil, repeats: true) 
} 
func update(){ 
    if(time > 0) { 
     time = time - 1 
     // do something while timer works 
    } 
    else{ 
     timer.invalidate() 
     timer = nil 
     time = 5 
    } 
} 
} 


class Main: UIView { 
var Clock: TimerCount! 
override func viewDidLoad() { 
    Clock = TimerCount() 
    //? do something else while clock works 
    // ? do other things while clock stops 
    // FOR EXAMPLE: show every second when timer works 
    if(Clock.time > 0){ 
     println(Clock.time) 
    }else{ 
     println("clocker stops") 
    } 

}   
} 
+0

你问如何从参考变量'time'类TimerCount班主要? –

+0

我知道如何做到这一点,并将其添加到上面的示例代码中以阐明目的。你知道如何在Main类中显示每秒,而不是在TimerCount类中吗? – Peterxwl

回答

0

viewDidLoad很可能只会被调用一次。您可以简单地将更新方法放在您的Main对象中,然后将该主实例和该更新方法传递给scheduledTimerWithTimerInterval调用。否则,您需要在Main类中使用新方法从timerCount类调用,并在当前时间内传入int。

这是主类:

func updateMethodInMain(timeAsInt: Int){ 
//do stuff in Main instance based on timeAsInt 
} 

这是你在你的计时器类:

func update(){ 
    if(time > 0) { 
     time = time - 1 
     instanceNameForMain.updateMethodInMain(time) 
    } 
    else{ 
     timer.invalidate() 
     timer = nil 
     time = 5 
    } 
} 
} 
+0

我知道你的方法,但在我的具体情况下,这是不允许的。正如我所问,我想只在主类中解决此问题,而不更改或修改TimerCount类。换句话说,我想知道swift是否有注册或监控定时器活动的方法? – Peterxwl

+0

我建议你可以只修改main的第一个选项。虽然第二个选择将是标准。 –