在我的音频应用中,我正在使用进度滑块播放音频 - 在用户界面中,我想显示该剧集的播放时间。我就是这样做的。
@objc func updateSlider(){
Slider.value = Float(audioPlayer.currentTime)
func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) {
return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}
let example = (Float(audioPlayer.currentTime))
let myIntValue = Int(example)
self.goneTime.text = String(Float(describing: myIntValue)
此代码动态更新标签,但它按照指定的格式(Int,Int,Int)进行更新。示例输出:(1,5,20)当我想要1:5:20时。
我试图修改标记为错误的格式(Int / Int / Int)。
一种解决方法 - 但是一个丑陋的 - 我发现using this Swift 3 answer:使用.replacingOccurrencesOf。从documentation开始,它表示您可以一次替换字符串的一部分。
所以我将代码更改为:
func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) {
return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}
let example = (Float(audioPlayer.currentTime))
let myIntValue = Int(example)
let updated = secondsToHoursMinutesSeconds(seconds: myIntValue)
let updated2 = String(describing: updated)
let str2 = updated2.replacingOccurrences(of: ",", with: ":", options:
NSString.CompareOptions.literal, range: nil)
let str3 = str2.replacingOccurrences(of: "(", with: "", options:
NSString.CompareOptions.literal, range: nil)
self.goneTime.text = str3
这样可以,但有一种最佳做法可以简化这些类型的修改吗? Swift和学习新手。
答案 0 :(得分:3)
AVAudioPlayer currentTime
instance属性返回TimeInterval
(Double)。您应该使用DateComponentsFormatter
并将unitsStyle
设置为位置:
extension Formatter {
static let positional: DateComponentsFormatter = {
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
return formatter
}()
}
游乐场测试:
let seconds: TimeInterval = 3920
let display = Formatter.positional.string(from: seconds) // "1:05:20"
在您的情况下使用:
goneTime.text = Formatter.positional.string(from: audioPlayer.currentTime)
答案 1 :(得分:2)
您可以使用Swift Interpolation:
执行此操作let time = (1, 5, 20)
let myString = "\(time.0):\(time.1):\(time.2)"
答案 2 :(得分:1)
在Swift中你可以简单地使用String InterPolation来实现你想要的任何数据结果,如下所示:
例如:
let val1 = 10
let val2 = 20
let val3 = 30
let result = "\(val1) : \(val2) : \(val3)"
print(result) // it will give output: 10:20:30
希望它有所帮助!
答案 3 :(得分:1)
只是为了好玩,你可以用功能的方式做到这一点:
let time = [1, 5, 20]
let result = time.reduce("", { $0 + ($0.isEmpty ? "" : ":") + "\($1)" })
print(result) // "1:5:20"