Definire
func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) {
return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}
Uso
> secondsToHoursMinutesSeconds(27005)
(7,30,5)
o
let (h,m,s) = secondsToHoursMinutesSeconds(27005)
La funzione sopra fa uso delle tuple Swift per restituire tre valori contemporaneamente. Distruggi la tupla usando la let (var, ...)
sintassi o puoi accedere ai singoli membri della tupla, se necessario.
Se hai davvero bisogno di stamparlo con le parole Hours
ecc., Usa qualcosa del genere:
func printSecondsToHoursMinutesSeconds (seconds:Int) -> () {
let (h, m, s) = secondsToHoursMinutesSeconds (seconds)
print ("\(h) Hours, \(m) Minutes, \(s) Seconds")
}
Si noti che l'implementazione di cui sopra secondsToHoursMinutesSeconds()
funziona per Int
argomenti. Se vuoi una Double
versione dovrai decidere quali sono i valori di ritorno - potrebbero essere (Int, Int, Double)
o potrebbero essere (Double, Double, Double)
. Potresti provare qualcosa del tipo:
func secondsToHoursMinutesSeconds (seconds : Double) -> (Double, Double, Double) {
let (hr, minf) = modf (seconds / 3600)
let (min, secf) = modf (60 * minf)
return (hr, min, 60 * secf)
}
(seconds % 3600) % 60
può essere ottimizzato suseconds % 60
. Non è necessario estrarre prima le ore.