我可以使用Swift将整数转换为特定格式的字符串吗?

时间:2018-01-13 06:48:00

标签: ios swift

在我的音频应用中,我正在使用进度滑块播放音频 - 在用户界面中,我想显示该剧集的播放时间。我就是这样做的。

   @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和学习新手。

4 个答案:

答案 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"