我有這個函式可以成功地將計數器變數轉換為格式精美的分鐘和秒字串。如何將其擴展為顯示 MM:SS:milliseconds 的格式?
我想也許應該做let milliseconds = Int(Double(seconds / 60) * 100)并將其附加到回報中。有小費嗎?
注意:我的計時器應該以足夠的粒度發布@State var timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()
func formatMmSs(counter: Double) -> String {
let minutes = Int(counter) / 60 % 60
let seconds = Int(counter) % 60
return String(format: "i:i", minutes, seconds)
}
uj5u.com熱心網友回復:
您只需要將計數器(秒數)乘以 1000,將余數除以 1000 并將結果強制轉換為整數:
func formatMmSsMl(counter: Double) -> String {
let minutes = Int((counter/60).truncatingRemainder(dividingBy: 60))
let seconds = Int(counter.truncatingRemainder(dividingBy: 60))
let milliseconds = Int((counter*1000).truncatingRemainder(dividingBy: 1000))
return String(format: "d:d.d", minutes, seconds, milliseconds)
}
或實作為 BinaryFloatingPoint 型別的計算屬性:
extension BinaryFloatingPoint {
var intValue: Int { Int(self) }
var minutesSecondsMilliseconds: String {
String(format: "d:d.d",
(self / 60).truncatingRemainder(dividingBy: 60).intValue,
truncatingRemainder(dividingBy: 60).intValue,
(self * 1000).truncatingRemainder(dividingBy: 1000).intValue)
}
}
您還可以自定義格式化浮點數。無需強制為整數,如下所示:
extension TimeInterval {
var minutesSecondsMilliseconds: String {
String(format: ".0f:.0f..0f",
(self / 60).truncatingRemainder(dividingBy: 60),
truncatingRemainder(dividingBy: 60),
(self * 1000).truncatingRemainder(dividingBy: 1000).rounded(.down))
}
}
123.45678.minutesSecondsMilliseconds // "02:03.456"
uj5u.com熱心網友回復:
這是繼續使用你的方法,也遵循 Leo 方法,
func formatMmSs(counter: Double) -> String {
let minutes = Int(counter) / 60 % 60
let seconds = Int(counter) % 60
let milliseconds = Int(counter*1000) % 1000
return String(format: "d:d:d", minutes, seconds, milliseconds)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450997.html
