在Swift中测量经过时间

我们如何衡量在Swift中运行一个函数所花费的时间?我试图以这种方式显示经过的时间:“经过的时间为.05秒”。看到在Java中,我们可以使用System.nanoTime(),Swift中有可用的等效方法来实现这一点吗?

请看一下示例程序:

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");

}

回答:

这是我编写的用于测量Swift中的Euler问题的Swift函数

从Swift 3开始,Grand Central Dispatch现在有一个“精简版”版本。因此正确的答案可能是使用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:

// 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中测量经过时间 的全部内容, 来源链接: utcz.com/qa/398929.html

回到顶部