问题描述
我想将当前时间 (Date()) 和 AVAudioPlayer 总时间歌曲时间 (play.duration) 加在一起以获得歌曲结束的时间?
func play(){
let path = Bundle.main.path(forResource: "song",ofType:"mp3")!
let url = URL(fileURLWithPath: path)
do{
player = try AVAudioPlayer(contentsOf: url)
let endDate = Date() + player.duration
if player.isPlaying{
player.pause()
}
else{
player.play()
}
isPlaying = player.isPlaying
}catch{print("error")}
}
这是我的看法
vstack {
Text("I want to display the ending time here")
}
解决方法
我们可以将 TimeInterval
添加到 Date
TimeInterval 值总是以秒为单位指定;它产生 10,000 年范围内的亚毫秒级精度。
Date() + 60 //<- 1 Second
let endDate = Date() + avPlayer.duration
struct ContentView: View {
@ObservedObject var viewModel = MyViewModel() //<- here
var body: some View {
VStack {
Text(viewModel.endTime) //<- here
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在您的视图模型中
class MyViewModel: ObservableObject {
@Published var endDate: Date? //<- here
var endTime: String{
if endDate == nil {
return ""
}else {
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm"
return dateFormatter.string(from: endDate)
}
}
func play(){
let path = Bundle.main.path(forResource: "song",ofType:"mp3")!
let url = URL(fileURLWithPath: path)
do{
player = try AVAudioPlayer(contentsOf: url) //<-here
endDate = Date() + player.duration
if player.isPlaying{
player.pause()
}
else{
player.play()
}
isPlaying = player.isPlaying
}catch{print("error")}
}
}