2014-07-04 49 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的第一個選項。雖然第二個選擇將是標準。 –