2017-02-02 2 views
1

私は前方と後方をスキップできるプロトタイププレーヤーアプリを構築しています。問題は、遠くまでスキップしたり、以前のボタンを何度も押すと、「インデックスが範囲外です」ためにアプリケーションがクラッシュすることです。私は多くのことを試みましたが、この問題を解決できませんでした。これは私のコードです。ありがとう!インデックスの範囲外のクラッシュを防ぐにはどうすればよいですか?

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() 
} 
+1

は、おそらく '>'を '> ='に変更するのは、配列のインデックス付けは通常0から始まり、count-1で終了するからです。 – Woody1193

+0

それだけでなく、 'currentTrack> = urlPlayerItems.count - 1'(not + 1)が必要です。 'currentTrack == urlPlayerItems.count'が既に範囲外ですし、' currentTrack == urlPlayerItems.count - 1'ならば、あなたは増分すると範囲外になります。 – Connor

+0

同様に、あなたの 'didTapPreviousButton'メソッドの' currentTrack == 0'がほしいと思うでしょう – Woody1193

答えて

1
let player = AVPlayer() 

var urlPlayerItems = [String]() 

var currentTrack: Int = 0 

@IBAction func didTapPreviousButton(_ sender: UIButton) { 
    if currentTrack >= 1 { 
     currentTrack -= 1 
    } 

    playTrack() 
} 

@IBAction func didTapNextButton(_ sender: UIButton) { 
    if currentTrack <= urlPlayerItems.count - 2 { 
     currentTrack += 1 
    } 

    playTrack() 
} 
+0

ありがとう!ユーザーが最初の動画にスキップしないようにするにはどうすればよいですか?彼らができるのは、前のボタンをタップするか、その逆にすることだけです。また、なぜあなたが持っているものにこの行を変更したのですか?(currentTrack - 1)<= 0 {? – user7097242

+0

その場合、 'currentTrack'がインクリメントまたはデクリメントできる場合(つまり、if文の最初の枝を削除するように)、コードを変更したい場合は、 – Woody1193

+0

を表示するように答えを更新します。どうすればいいですか? – user7097242

0

あなたはインデックスが指定された配列で有効であるかどうかを簡単にチェックするために探しているなら、ここでは単にそれを行う拡張機能です:あなたがすべきあなたの `didTapNextButton`方法で

extension Array { 
    func canSupport(index: Int) -> Bool { 
     return index >= startIndex && index < endIndex 
    } 
} 

let test = ["", ""] 
print(test.canSupport(index: 0)) //prints true 
print(test.canSupport(index: 2)) //prints false 
関連する問題