我想添加当前时间(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的值总是以秒为单位指定;它的收益率在10000年的范围内,精确到毫秒以下。
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()
}
}
在你的ViewModel
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")}
}
}