我有一個 Int,這個 Int 與分鐘數有關。我使用以下代碼將此 Int 轉換為小時、分鐘和秒,并且在計時器低于 0 之前一切正常。
let hours = Int(timeRemaining) / 3600
let minutes = Int(timeRemaining) / 60 % 60
let seconds = Int(timeRemaining) % 60
timeLeftLabel.text = String(format:"i:i:i", hours, minutes, seconds)
上面代碼的輸出看起來像這樣,它倒計時很完美:02:56:07
但是,一旦時間達到 0,格式就開始看起來像這樣:-2:-56:-7(這顯然是在負 2 小時之后,它不會立即跳到負 2 小時,我只是想突出重點)
如您所見,這里有很多問題,首先是減號,我只是希望開頭有一個減號。然后小時和秒中缺少 0,它應該簡單地閱讀:-02:56:07
我想嘗試解決這個問題的唯一方法是使用:replaceOccurrences(of) 但想知道是否有更好的選擇?
非常感謝任何建議。
uj5u.com熱心網友回復:
一個更好的解決方案是使用 DateComponentsFormatter
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute, .second]
formatter.zeroFormattingBehavior = .pad
例子
let timeRemaining: TimeInterval = 2 * 60 * 60 56 * 60 7
let negative = -1 * timeRemaining
print(formatter.string(from: timeRemaining)!)
print(formatter.string(from: negative)!)
02:56:07
-02:56:07
uj5u.com熱心網友回復:
由于您只希望在整個字串前面有一個負號,因此從區間的絕對值開始并進行算術運算,如果原始值為負,則在前面加上減號。
(但我同意最好使用格式化程式而不使用算術。)
uj5u.com熱心網友回復:
解決方案
您可以嘗試使用此代碼abs()來合成信號timeLeftLabel.text = String(format:"i:i:i", hours, abs(minutes), abs(seconds))
順便一提
算術并不總是像預期的那樣順利,您可以嘗試類似Formatter的或New FormattersiOS15 支持的方法
參考:https : //sarunw.com/posts/new-formatters-in-ios15/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/399868.html
標籤:迅速
上一篇:使用Swift獲取最后一個目錄中的檔案名和完整目錄路徑
下一篇:具有通用資料型別的Swift下標
