13
var songs = MPMediaQuery()
var localSongs = songs.items
songList = NSMutableArray(array: localSongs)

tableView.reloadData()

var song = MPMediaItem(coder: songList[0] as NSCoder)

var currentItem = AVPlayerItem(URL: song.valueForProperty(MPMediaItemPropertyAssetURL) as NSURL)

player.replaceCurrentItemWithPlayerItem(currentItem)

player.play()

var songTitle: AnyObject! = song.valueForProperty(MPMediaItemPropertyTitle)

songName.text = songTitle as? String

sliderOutlet.value = Float(player.currentTime()) // <<-Error here

我正在构建一个音乐播放器,我想要一个滑块来显示歌曲的持续时间,但我收到了这个错误

找不到接受提供的参数的“init”的重载

我认为问题是将 CMTime 转换为 Float。

4

2 回答 2

31

CMTime是一个结构,包含 avaluetimescale其他字段,因此您不能只是将其“强制转换”为浮点值。

幸运的是,有一个转换功能CMTimeGetSeconds()

let cmTime = player.currentTime()
let floatTime = Float(CMTimeGetSeconds(player.currentTime()))

更新:Swift 3 开始, player.currentTime返回 a TimeInterval它是Double. 因此转换为Float简化为

let floatTime = Float(player.currentTime)
于 2014-09-17T15:36:10.477 回答
2

CMTime 是一个结构,包含一个值、时间刻度、标志和纪元。因此,您不能只是将其“强制转换”为浮点值。

您可以通过直接编写来使用该值

sliderOutlet.value = Float(player.currentTime().value)

但这只会以毫秒为单位给出玩家的价值。要以秒为单位获取值,请使用以下命令:

sliderOutlet.value = Float(CMTimeGetSeconds(player.currentTime()))

请注意,这也可能不是您应该拥有滑块值的正确方式。

于 2017-12-06T13:05:13.593 回答