Definir
func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) {
return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}
Usar
> secondsToHoursMinutesSeconds(27005)
(7,30,5)
ou
let (h,m,s) = secondsToHoursMinutesSeconds(27005)
A função acima utiliza as tuplas Swift para retornar três valores ao mesmo tempo. Você desestrutura a tupla usando a let (var, ...)
sintaxe ou pode acessar membros individuais, se necessário.
Se você realmente precisar imprimi-lo com as palavras, Hours
etc, use algo como isto:
func printSecondsToHoursMinutesSeconds (seconds:Int) -> () {
let (h, m, s) = secondsToHoursMinutesSeconds (seconds)
print ("\(h) Hours, \(m) Minutes, \(s) Seconds")
}
Observe que a implementação acima secondsToHoursMinutesSeconds()
funciona para Int
argumentos. Se você deseja uma Double
versão, precisará decidir quais são os valores de retorno - podem (Int, Int, Double)
ou podem ser (Double, Double, Double)
. Você pode tentar algo como:
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
pode ser otimizado paraseconds % 60
. Não há necessidade de extrair as horas primeiro.