在Swift中测量经过时间 [英] Measure elapsed time in Swift
问题描述
我们如何测量在Swift中运行一个函数所花费的时间?我试图以这种方式显示经过的时间:经过的时间为.05秒".看到在Java中,我们可以使用System.nanoTime(),Swift中是否有等效的方法可以完成此任务?
How can we measure the time elapsed for running a function in Swift? I am trying to display the elapsed time like this: "Elapsed time is .05 seconds". Saw that in Java, we can use System.nanoTime(), is there any equivalent methods are available in Swift to accomplish this?
请查看示例程序:
func isPrime(var number:Int) ->Bool {
var i = 0;
for i=2; i<number; i++ {
if(number % i == 0 && i != 0) {
return false;
}
}
return true;
}
var number = 5915587277;
if(isPrime(number)) {
println("Prime number");
} else {
println("NOT a prime number");
}
推荐答案
这是我编写的用于测量 Project Euler 的Swift函数. a> Swift中的问题
Here's a Swift function I wrote to measure Project Euler problems in Swift
从Swift 3开始,Grand Central Dispatch现在有一个精简版"版本.因此,正确的答案可能是使用 DispatchTime API .
As of Swift 3, there is now a version of Grand Central Dispatch that is "swiftified". So the correct answer is probably to use the DispatchTime API.
我的功能如下:
// Swift 3
func evaluateProblem(problemNumber: Int, problemBlock: () -> Int) -> Answer
{
print("Evaluating problem \(problemNumber)")
let start = DispatchTime.now() // <<<<<<<<<< Start time
let myGuess = problemBlock()
let end = DispatchTime.now() // <<<<<<<<<< end time
let theAnswer = self.checkAnswer(answerNum: "\(problemNumber)", guess: myGuess)
let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds // <<<<< Difference in nano seconds (UInt64)
let timeInterval = Double(nanoTime) / 1_000_000_000 // Technically could overflow for long running tests
print("Time to evaluate problem \(problemNumber): \(timeInterval) seconds")
return theAnswer
}
旧答案
对于Swift 1和2,我的函数使用NSDate:
Old answer
For Swift 1 and 2, my function uses NSDate:
// Swift 1
func evaluateProblem(problemNumber: Int, problemBlock: () -> Int) -> Answer
{
println("Evaluating problem \(problemNumber)")
let start = NSDate() // <<<<<<<<<< Start time
let myGuess = problemBlock()
let end = NSDate() // <<<<<<<<<< end time
let theAnswer = self.checkAnswer(answerNum: "\(problemNumber)", guess: myGuess)
let timeInterval: Double = end.timeIntervalSinceDate(start) // <<<<< Difference in seconds (double)
println("Time to evaluate problem \(problemNumber): \(timeInterval) seconds")
return theAnswer
}
请注意,建议不要将NSdate用于计时功能:"由于与外部时间参考同步或由于用户明确更改了时钟,系统时间可能会减少."./sub>
这篇关于在Swift中测量经过时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!