Swift 更实用/快捷的时间转换方式
我试图将时间长度转换为小时:分钟到分钟。时间是以字符串形式给出的,我想返回两倍的分钟数 目前我正在使用以下功能:Swift 更实用/快捷的时间转换方式,swift,functional-programming,Swift,Functional Programming,我试图将时间长度转换为小时:分钟到分钟。时间是以字符串形式给出的,我想返回两倍的分钟数 目前我正在使用以下功能: func convertMinHoursToDouble(length: String) -> Double { var hours = 0.0 var minutes = 0.0 let lengthCleaned = length.stringByReplacingOccurrencesOfString(":", withString: "") var count =
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
这是可行的,但是我正试图以一种更实用/快捷的方式来实现这一点。如何使用reduce函数完成此操作。这是我能找到的最接近解决方案
let convertedTime = time.characters.reduce(0) { (dub, char) in dub + Double(String(char))! }
功能解决方案:
func convertMinHoursToDouble(time: String) -> Int {
let timeComps = (time as NSString).componentsSeparatedByString(":") as [NSString]
return timeComps.reduce(0) { acc, item in
acc * 60 + item.integerValue
}
}
let time = "02:15"
let convertedTime = convertMinHoursToDouble(time)
print(convertedTime)
将字符串拆分为多个组件,并在该数组上进行缩减。对于03:24:34这样的字符串,它也可以像符咒一样计算时间(以秒为单位)
如果要处理格式错误的字符串:否:、多个:、无效分钟值(如78等),可以添加其他验证逻辑。功能解决方案:
func convertMinHoursToDouble(time: String) -> Int {
let timeComps = (time as NSString).componentsSeparatedByString(":") as [NSString]
return timeComps.reduce(0) { acc, item in
acc * 60 + item.integerValue
}
}
let time = "02:15"
let convertedTime = convertMinHoursToDouble(time)
print(convertedTime)
将字符串拆分为多个组件,并在该数组上进行缩减。对于03:24:34这样的字符串,它也可以像符咒一样计算时间(以秒为单位)
如果要处理格式错误的字符串:否:、多个:、无效分钟值(如78等),则可以添加其他验证逻辑。纯Swift方法是:
let time = "02:16"
let converted = time.characters.split(":")
.flatMap { Int(String($0)) }
.reduce(0) { $0 * 60 + $1 }
print(converted) //"136\n"
纯粹的快捷方式是:
let time = "02:16"
let converted = time.characters.split(":")
.flatMap { Int(String($0)) }
.reduce(0) { $0 * 60 + $1 }
print(converted) //"136\n"
如果您正在寻找如何改进这段代码,这个问题可能更适合。如果您正在寻找如何改进这段代码,这个问题可能更适合。这有一个双重转换,可以简化为一行:time.componentsSeparatedByString:as[NSString]。reduce0{a,v in 60*a+v.integerValue}。这很漂亮。感谢您的快速回答Cristik&CR Drost这有一个双重类型,可以简化为一行:time.componentsSeparatedByString:as[NSString]。简化0{a,v in 60*a+v.integerValue}。这很漂亮。谢谢你的快速回答Cristik&CR DrostYeap,比我快:是的,比我快: