Xcode 6- SWIFT- 将 CMTime 转换为浮点数
Posted
技术标签:
【中文标题】Xcode 6- SWIFT- 将 CMTime 转换为浮点数【英文标题】:Xcode 6- SWIFT- Cast CMTime as Float 【发布时间】:2014-09-17 15:22:07 【问题描述】: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。
【问题讨论】:
【参考方案1】:CMTime
是一个结构,包含value
、timescale
等字段,
所以你不能只是将它“转换”为浮点值。
还好有转换函数CMTimeGetSeconds()
:
let cmTime = player.currentTime()
let floatTime = Float(CMTimeGetSeconds(player.currentTime()))
更新:从 Swift 3, player.currentTime
返回一个
TimeInterval
是 Double
的类型别名。
因此转换为Float
简化为
let floatTime = Float(player.currentTime)
【讨论】:
是的,这行得通谢谢@Martin PS:将来有没有什么技巧可以让我自己解决这些问题? (当然除了在这里问:))我尝试阅读 CMTime 参考,但无法弄清楚。 @Abdou023:嗯,CMTimeGetSeconds()
记录在 developer.apple.com/library/prerelease/ios/documentation/… 中。您还可以在 Swift 源文件(例如,在 CMTime 上)中按住 cmd 键单击类型或方法,这会引导您进入 Swift 定义,然后您可以在其中找到相关方法。【参考方案2】:
CMTime 是一个结构,包含一个值、时间刻度、标志和纪元。因此,您不能只是将其“转换”为浮点值。
可以直接写来使用值
sliderOutlet.value = Float(player.currentTime().value)
但这只会以毫秒为单位给出播放器的值。要以秒为单位获取值,请使用以下命令:
sliderOutlet.value = Float(CMTimeGetSeconds(player.currentTime()))
请注意,这也可能不是您应该拥有滑块值的正确方式。
【讨论】:
以上是关于Xcode 6- SWIFT- 将 CMTime 转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NSTimeInterval 进行 CMTime 引用
如何将 Xcode 6.1.1 Swift 代码转换为 Xcode 6.4 Swift 代码?
将 xcode 6 beta 6 升级到 xcode 6 GM 种子后的 Swift 编译器错误
“无法将类型 'String' 的值分配给类型 'AnyObject?'”,Swift 3,Xcode 8 beta 6