Swift中如何将字符串中的时间格式转换为TimeInterval?
提取字符串中的时长并转换为TimeInterval(Swift)
我有一个包含时长信息的字符串数组,示例代码如下:
let arrayOfStrings: [String] = ["Episode 1 - 23 min", "Episode 2 - 42 min", "Episode 3 - 45 min"] func convertToTimeInterval(from string: String) -> TimeInterval { // 逻辑代码... return timeInterval // Double类型 }
期望调用后得到以下输出:
arrayOfStrings.forEach { string in print(convertToTimeInterval(from: string)) } // 输出结果 1380 // 来自"23 min"的timeinterval 2520 // 来自"42 min"的timeinterval 2700 // 来自"45 min"的timeinterval
遇到的问题
- 按'min'字符分割无法支持多语言场景,不同语言的时长单位文本不同,无法提前确定分割字符
- 使用
CharacterSet.separatedBy分割时,会误提取字符串中无关的数字(比如"Episode 1"里的1)
解决方案
利用NSDataDetector可以高效解决这个问题,它能自动识别多语言环境下的时长信息,准确提取有效时长数值:
import Foundation let arrayOfStrings: [String] = ["Episode 1 - 23 min", "Episode 2 - 42 min", "Episode 3 - 45 min"] func convertToTimeInterval(from string: String) -> TimeInterval { // 创建日期类型的检测器 guard let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.date.rawValue) else { return 0 } // 检测字符串中的时间相关内容 let matches = detector.matches(in: string, range: NSRange(string.startIndex..., in: string)) for match in matches { // 提取匹配到的日期组件 if let dateComponents = match.dateComponents { // 取出分钟数并转换为秒级TimeInterval if let minutes = dateComponents.minute { return TimeInterval(minutes * 60) } } } // 未匹配到时长时返回0 return 0 } // 测试输出 arrayOfStrings.forEach { string in print(convertToTimeInterval(from: string)) }
方案优势
- 无需硬编码时长单位(如"min"、"分钟"等),自动适配多语言场景
- 仅识别有效的时长数字,不会误提取无关的数字内容
内容的提问来源于stack exchange,提问作者Manny
相关产品推荐
相关产品推荐

