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に変換することだと思います。
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)
CMTimeは構造体であり、値、タイムスケール、フラグ、およびエポックが含まれています。したがって、浮動小数点値に単に「キャスト」することはできません。
直接書き込むことで値を使用できます
sliderOutlet.value = Float(player.currentTime().value)
ただし、これはミリ秒単位のプレーヤーの値のみを提供します。秒単位で値を取得するには、次を使用します。
sliderOutlet.value = Float(CMTimeGetSeconds(player.currentTime()))
これは、スライダーの値を正しく設定する方法ではない可能性もあります。