首页 > 解决方案 > 在 Swift/SwiftUI 中仅显示 Date 对象的时间

问题描述

我一直在使用结束时间显示音频持续时间。一位优秀的 Stack Overflow 开发人员提出了这个解决方案。

因此,我在我的观点中添加了这个:

struct ContentView: View {
    @ObservedObject var viewModel = MyViewModel() //<- here
    var body: some View {
        VStack {
            
            Text(viewModel.endTime) //<- here
            
        }
    }
}

这是我的代码viewModel

class MyViewModel: ObservableObject {
    @Published var endDate: Date? 
    var endTime: String{
        endDate == nil ? "":endDate!.description 
    }

    func play(){
        let path = Bundle.main.path(forResource: "song", ofType:"mp3")!
        let url = URL(fileURLWithPath: path)
        do {
            player = try AVAudioPlayer(contentsOf: url)
            
            endDate = Date() + player.duration
            if player.isPlaying{
                
                player.pause()
                
            }
            else{
                player.play()
                
            }
            isPlaying = player.isPlaying
        }catch{print("error")}

但我得到了错误的时间(不是系统时间),但日期正确。我只想显示不带日期的正确时间。

标签: iosswiftswiftuiavaudioplayer

解决方案


从 iOS 14+ 开始,Text有一个名为 style 的属性,用于显示日期。

文本日期样式

用于显示日期的预定义样式。

init(Date, style: Text.DateStyle)

创建一个使用特定样式显示本地化日期和时间的实例。https://developer.apple.com

您不需要使用DateFormatter. 使用Text()with timeas 样式可能就足够了。

Text(Date(), style: .time) 

在你的情况下:

Text(viewModel.endTime, style: .time)

推荐阅读