質問: image[indexPath.row]` で値を格納しようとしましたが、 `index out of range` のシグバートエラーが発生してしまいました。この時に配列の数以上のものを取得しようとしていたわけでもなくエラーが出てしまった為、なぜそのようなエラーが発生したかもはっきりと理解出来ずにいます。そこの部分ももしよろしければ教えて頂けるとありがたいです。 ### 補足情報(FW/ツールのバージョンなど) Xcode Version 9.3.1 よろしくお願い致します。
回答: コードがないので、憶測ですが、こんなふうに書かれてれば、index out of range ``` // collectionViewのCellの内容を返す func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = totalXib.totalCollectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! CollectionViewCell // もしallArrayのcountが0だったら if allArray.count == 0 { print("DEBUG_PRINT: allArrayのデータが0です") } else if allArray.count > 0 { print("DEBUG_PRINT: allArrayのデータが0以上です") // for文でallArrayをloopさせ全ての要素を取り出す for allArrayValue in allArray { var image = [UIImage]() image.append(UIImage(data: Data(base64Encoded: allArrayValue.imageString, options: .ignoreUnknownCharacters)!)!) cell.imageView.image = image[indexPath.row] } } return cell } ``` これなら一応、index out of rangeにならずにうごくかな? ``` // 配列をメソッドのスコープの外で定義 var imageArray = [UIImage]() // collectionViewのCellの内容を返す func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = totalXib.totalCollectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! CollectionViewCell // もしallArrayのcountが0だったら if allArray.count == 0 { print("DEBUG_PRINT: allArrayのデータが0です") } else if allArray.count > 0 { print("DEBUG_PRINT: allArrayのデータが0以上です") // for文でallArrayをloopさせ全ての要素を取り出す for allArrayValue in allArray { var image: UIImage image = UIImage(data: Data(base64Encoded: allArrayValue.imageString, options: .ignoreUnknownCharacters)!)! imageArray.append(image) } cell.imageView.image = imageArray[indexPath.row] } return cell } ``` で、型変換をする場所は状況によるのでなんとも?なのですが、コレとかが非常に参考になると思います。 気になったところがあるので追記します。 これ↓は、 ``` if allArray.count == 0 { print("DEBUG_PRINT: allArrayのデータが0です") } else if allArray.count > 0 { print("DEBUG_PRINT: allArrayのデータが0以上です") ``` これ↓が、allArray.count==0なら、Cellの数が0になって、collectionViewのCellの内容を返すメソッド(cellForItemAt)が動かないのでうえ↑いらないのでは? ``` // CollectionViewのCellの数を返す func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return allArray.count } ```