更多功能/快捷方式将时间转换为分钟

时间:2016-01-05 17:22:57

标签: swift functional-programming

我正在尝试将“小时:分钟”中的一段时间转换为“分钟”。时间以字符串形式给出,我希望返回Double of minutes。

目前我正在使用以下功能:

func convertMinHoursToDouble(length: String) -> Double {
var hours = 0.0
var minutes = 0.0

let lengthCleaned = length.stringByReplacingOccurrencesOfString(":", withString: "")

var count = 0
for char in lengthCleaned.characters {
  if count == 0 {
    hours = Double("\(char)")! * 60
  } else if count == 1 {
    minutes = Double("\(char)")! * 10
  } else if count == 2 {
    minutes = Double("\(char)")! + minutes
  }
  ++count
 }
return hours+minutes
}

let time = "2:16"
let convertedTime = convertMinHoursToDouble(time)
print(convertedTime) // prints 136.0

这是有效的,但我试图以更多功能/ Swift方式执行此操作。如何使用reduce功能完成。这是我能找到最接近解决方案的。

let convertedTime = time.characters.reduce(0) { (dub, char) in dub + Double(String(char))!  }

2 个答案:

答案 0 :(得分:4)

功能解决方案:

payment_method_type

将字符串拆分为组件,并减少该数组。这对于像#03; 03:24:34"以秒为单位计算时间。

如果您想要处理格式错误的字符串,可以添加其他验证逻辑:no":",多个":",无效的分钟值(例如78),等

答案 1 :(得分:4)

纯粹的Swift方式是:

let time = "02:16"

let converted = time.characters.split(":")
    .flatMap { Int(String($0)) }
    .reduce(0) {  $0 * 60 + $1 }

print(converted) //"136\n"