倒計(jì)時
原始版本
僅貼出計(jì)算時間的核心代碼
//每個時間間隔0.1s調(diào)用一次
func secondsToTimeString(seconds: Float) -> (String, Int, Int, Int, Int, Int) {
let temp = seconds
let seconds = Int(temp)
// 天數(shù)計(jì)算
let days = (seconds)/(24*3600);
//小時計(jì)算
let hours = (seconds)%(24*3600)/3600;
//分鐘計(jì)算
let minutes = (seconds)%3600/60;
//秒計(jì)算
let second = (seconds)%60;
let timeString = String(format: "%lu天 %02lu:%02lu:%02lu", days, hours, minutes, second)
return (timeString, days, hours, minutes, second, Int((temp-Float(seconds))*10))
}
每次調(diào)用都需要重新計(jì)算時分秒喂击,計(jì)算很頻繁。CPU這樣也太累了吧?于是我決定給它減減負(fù)夯辖。實(shí)際上大多數(shù)時間有些數(shù)字都不會變動。比如分鐘60秒才會變一次董饰,小時60分鐘才會變一次蒿褂。等等。
進(jìn)化版本
定義如下屬性:
var days: Int?;
//小時
var hours: Int?;
var hoursFlag: Bool = false
//分鐘
var minutes: Int?
var minutesFlag: Bool = false
//秒
var second: Int?;
var secondFlag: Bool = false
//每個時間間隔0.1s調(diào)用一次
func secondsToTimeString2(seconds: Float) -> (Int, Int, Int, Int, Int) {
let temp = seconds
let seconds = Int(temp)
let minInterval = Int((temp-Float(seconds))*10)
if second == nil {
second = (seconds)%60
}
if minutes == nil {
minutes = (seconds)%3600/60
}
if hours == nil {
hours = (seconds)%(24*3600)/3600
}
if days == nil {
days = (seconds)/(24*3600)
return (days!, hours!, minutes!, second!, minInterval)
}
if minInterval == 9 {
secondFlag = true
if second == 0 {
second = 60
second! -= 1
} else {
second! -= 1
}
}
if second == 59 && secondFlag == true {
secondFlag = false
minutesFlag = true
if minutes == 0 {
minutes = 60
minutes! -= 1
} else {
minutes! -= 1
}
}
if minutes == 59 && minutesFlag == true {
minutesFlag = false
hoursFlag = true
if hours == 0 {
hours = 24
hours! -= 1
} else {
hours! -= 1
}
}
if hours == 23 && hoursFlag == true {
hoursFlag = false
if days != 0 {
days! -= 1
}
}
return (days!, hours!, minutes!, second!, minInterval)
}
代碼變得復(fù)雜多了卒暂,你們覺得我是不是咸的蛋疼啄栓?哈哈哈,我就是這樣追求極致的呀也祠!
代碼雖然多了很多昙楚,也花了我不少時間debug。但是改進(jìn)后性能卻提升了很多诈嘿。