这是我编写的用于测量Swift中的Euler问题的Swift函数
从Swift 3开始,Grand Central Dispatch现在有一个“精简版”版本。因此正确的答案可能是使用DispatchTime
API。
我的函数看起来像:
// Swift 3func 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 1func 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用于计时功能:“ 由于与外部时间参考同步或由于用户明确更改了时钟,因此系统时间可能会减少。 ”。



