Wypróbuj go jako rozszerzenie na CGFloat podobnego -
extension CGFloat {
static func randomFloat() -> CGFloat {
return CGFloat(arc4random_uniform(UInt32(UInt16.max))) * 0.000015 + 0.8
}
}
i nazwać użyciem -
CGFloat.randomFloat()
Po uruchomieniu kilku testów, które wymagały wywołania go w pętli 100 milionów razy na wątku głównym i wydaje się szybsze, niż gdyby ta sama funkcja została zaimplementowana jako metoda.
Oto 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)
}
Wynik
CGFloat przedłużenie wziął 3.19389200210571 sekund.
funkcja zajęła 5.25490999221802 sekund.
Powinieneś opublikować, co próbujesz. – Avt
Przepraszam .......... –
inline w swift będzie można uzyskać jak @ line i można użyć UInt16.max –