在 Swift 中测量经过的时间 [英] Measure elapsed time in Swift
问题描述
我们如何测量在 Swift 中运行一个函数所用的时间?我试图像这样显示经过的时间:经过的时间是 0.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(_ 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) {
print("Prime number")
} else {
print("NOT a prime number")
}
推荐答案
这是我写的一个 Swift 函数来测量 Project Euler 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 用于计时功能:系统时间可能会因与外部时间参考同步或由于用户显式更改时钟而减少.";.
这篇关于在 Swift 中测量经过的时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!