2016-11-11 51 views
0

我遵循DuncanC的解決方案Swift timer in milliseconds。下面的代碼:我該如何製作一個以hh:mm:ss計算的Swift 3.0計時器:ms

startTime = NSDate.timeIntervalSinceReferenceDate 
Timer.scheduledTimer(timeInterval: 0.02, 
              target: self, 
              selector: Selector(("advanceTimer:")), 
              userInfo: nil, 
              repeats: true) 


func advanceTimer(timer: Timer) 
{ 
    //Total time since timer started, in seconds 
    self.time = NSDate.timeIntervalSinceReferenceDate - startTime 
    //The rest of your code goes here 
} 

的Xcode建議我改變NSDate.timeIntervalSinceReferenceDate()NSDate.timeIntervalSinceReferenceDatestartTime: NSTimeIntervalstartTime: TimeInterval爲雨燕3.0。 我的代碼產生錯誤:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyGame.GameScene advanceTimer:]: unrecognized selector sent to instance

+0

你爲什麼用'NSDate'而不是'Date'? – rmaddy

+0

感謝您的更正。我設法從http://stackoverflow.com/questions/28872450/conversion-from-nstimeinterval-to-hour-minutes-seconds-milliseconds-in-swift – iGetIt

回答

3

在斯威夫特3 Selector語法變化,現在你需要傳遞的第一個參數標籤用你的行動,你的selector應該像#selector(self.advanceTimer(timer:))

Timer.scheduledTimer(timeInterval: 0.02, 
        target: self, 
        selector: #selector(self.advanceTimer(timer:)), 
        userInfo: nil, 
        repeats: true) 
+5

您已經發布了幾次類似的答案。你真的應該把這些問題作爲重複來解決。 – rmaddy

+0

@rmaddy下次我肯定會舉起旗幟:) –

1

advanceTimer(timer:)應區別宣佈根據Swift API Design Guidelines,您應該使用雨燕的本地Date,而不是NSDate和選擇的語法已經更改,因此您的代碼將現在這樣寫:

startTime = NSDate.timeIntervalSinceReferenceDate 
Timer.scheduledTimer(timeInterval: 0.02, 
        target: self, 
        selector: #selector(advanceTimer), 
        userInfo: nil, 
        repeats: true) 

func advanceTimer(_ timer: Timer) 
{ 
    //Total time since timer started, in seconds 
    self.time = NSDate.timeIntervalSinceReferenceDate - startTime 
    //The rest of your code goes here 
} 

而且,Timer有新的基於關閉的方法,因此您現在可以將整個事件縮減爲:

startTime = NSDate.timeIntervalSinceReferenceDate 
Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { timer in 
    //Total time since timer started, in seconds 
    self.time = NSDate.timeIntervalSinceReferenceDate - startTime 
    //The rest of your code goes here 
} 
+0

+1爲基於閉包的新計時器。我希望蘋果在iOS 4中補充說,他們第一次引入區塊。不知道爲什麼花了這麼長時間。直到幾天前,我才發現這種添加。 (請注意,如果您的應用需要在iOS 10之前的iOS版本上運行,那麼您無法使用基於閉包的定時器。:( –