provare come estensione sul CGFloat come -
extension CGFloat {
static func randomFloat() -> CGFloat {
return CGFloat(arc4random_uniform(UInt32(UInt16.max))) * 0.000015 + 0.8
}
}
e lo chiamano con -
CGFloat.randomFloat()
Dopo aver eseguito alcuni test, è stato necessario richiamarlo in un ciclo 100 milioni di volte sul thread principale e sembra più veloce che se la stessa funzione fosse implementata come metodo.
Ecco il test -
let loopIterationCount = 100000000
var timestamp = NSDate()
for var k = 0 ; k < loopIterationCount ; k++ {
let x = CGFloat.randomFloat()
}
var timeStampEnd = NSDate()
println("CGFloat extension took \(self.timeDifference(timestamp, endTime: timeStampEnd)) seconds.")
timestamp = NSDate()
for var k = 0 ; k < loopIterationCount ; k++ {
let x = self.randomFloat()
}
timeStampEnd = NSDate()
println("function took \(self.timeDifference(timestamp, endTime: timeStampEnd)) seconds.")
func randomFloat() -> CGFloat {
return CGFloat(arc4random_uniform(UInt32(UInt16.max))) * 0.000015 + 0.8
}
func timeDifference(startTime: NSDate, endTime: NSDate) -> NSTimeInterval {
return endTime.timeIntervalSinceDate(startTime)
}
Il risultato
estensione CGFloat preso 3.19389200210571 secondi.
la funzione ha richiesto 5,25490999221802 secondi.
Si dovrebbe pubblicare ciò che hai provato. – Avt
sorry .......... –
inline in swift può essere ottenuto come @inline e può utilizzare UInt16.max –