###前提・実現したいこと
たびたび質問をさせていただます。
MPMusicPlayerController
のcurrentPlaybackTime
を"mm:ss"
のString型にして、Timer
を用いて動的に変化させ、その時間をキーにした辞書から値を取り出すアプリを作りました。
swift
1 var dict = ["00:00": "イントロです", "00:21": "Aメロです", "00:48": "Bメロです", "01:05": "サビです"]//曲によって変わりますが、たとえば・・・ 2 //省略 3 if let key = currentTimeKey { 4 primeLabel.text = dict[currentTimeKey!] 5 }
もちろん、曲によってdictの内容は異なるようにしています。
そこで、今度は、3つのUILabel
を並べて、たとえば曲の再生時間(currentTimeKey
)が"00:23"
のときに、
prevLabel
に"イントロです"
primeLabel
に"Aメロです"
nextLabel
に"Bメロです"
となるようにしたいのです。
つまり
prevLabel.text = 前回nilじゃなかった時に取り出した値
primeLabel.text = 最も最近nilじゃなかった時に取り出した値
nextLabel.text = 次にnilじゃないときに取り出す予定の値
としたいのです。
###試したこと
前にnilじゃなかったときはいいとしても、
次にnilじゃないときの取り出す予定の値 については、
辞書の型をDictionaryLiteral
にしなくてはいけないのかな、と思いました。
swift
1if let index = dict.index(where: { $0.0 == currentTimeKey }) { 2 let value = dict[index].1 3 primeLabel.text = value 4}
ただ、上記のようにキーを指定して取り出しても、次にnilにならずに取り出せる値を取り出すのは難しいような気がしてなりません。
###補足情報(言語/FW/ツール等のバージョンなど)
Xcode8 Swift3
回答1件
あなたの回答
tips
プレビュー