私は前方と後方をスキップできるプロトタイププレーヤーアプリを構築しています。問題は、遠くまでスキップしたり、以前のボタンを何度も押すと、「インデックスが範囲外です」ためにアプリケーションがクラッシュすることです。私は多くのことを試みましたが、この問題を解決できませんでした。これは私のコードです。ありがとう!インデックスの範囲外のクラッシュを防ぐにはどうすればよいですか?
let player = AVPlayer()
var urlPlayerItems = [String]()
var currentTrack: Int = 0
@IBAction func didTapPreviousButton(_ sender: UIButton) {
if (currentTrack - 1) < 0 {
currentTrack = (urlPlayerItems.count - 1) < 0 ? 0 : (urlPlayerItems.count - 1)
} else {
currentTrack -= 1
}
playTrack()
}
@IBAction func didTapNextButton(_ sender: UIButton) {
if (currentTrack + 1) > urlPlayerItems.count {
currentTrack = 0
} else {
currentTrack += 1
}
playTrack()
}
は、おそらく '>'を '> ='に変更するのは、配列のインデックス付けは通常0から始まり、count-1で終了するからです。 – Woody1193
それだけでなく、 'currentTrack> = urlPlayerItems.count - 1'(not + 1)が必要です。 'currentTrack == urlPlayerItems.count'が既に範囲外ですし、' currentTrack == urlPlayerItems.count - 1'ならば、あなたは増分すると範囲外になります。 – Connor
同様に、あなたの 'didTapPreviousButton'メソッドの' currentTrack == 0'がほしいと思うでしょう – Woody1193