arraysswiftuicollectionviewindexpath

Access Array of Array Index in Collectionview swift


I have 4 different arrays:

var arrayFirst = ["1"]
var arraySecond = ["2"]
var arrayThird = ["3"]
var arrayFourth = ["4"]

Created a Single Array for collection view.

 var collectionArrayStr = [arrayFirst,arraySecond,arrayThird,arrayFourth]

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return collectionArrayStr.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ViewCell", for: indexPath) as! ViewCell

    print(collectionArrayStr[indexPath.row])
    //output:- (["1"])

    if let indexPathSlctedImage = collectionArrayStr[indexPath.row] as? [String] {
        cell.txtHeading.text = indexPathSlctedImage[indexPath.row] // No exact matches in call to subscript 
    }
    return cell
}

I followed the above approach to multiple arrays into a single array but I got the error when I access the index value I got the error given below:-

No exact matches in call to subscript

Question: How to get an index value in a single array?

Can someone please explain to me how to do this, I've tried with the above code but have no results yet. Please Correct me if I'm doing wrong.

Any help would be greatly appreciated


Solution

  • You are creating array of array by using

    var collectionArrayStr = [arrayFirst,arraySecond,arrayThird,arrayFourth]
    

    What you should do is as below.

    var collectionArrayStr : [String] = []
    collectionArrayStr.append(contentsOf: arrayFirst)
    collectionArrayStr.append(contentsOf: arraySecond)
    collectionArrayStr.append(contentsOf: arrayThird)
    collectionArrayStr.append(contentsOf: arrayFourth)
    
    print("collectionArrayStr==\(collectionArrayStr)")
    

    Output will be

    collectionArrayStr==["1", "2", "3", "4"]
    

    Now in cell use as below.

    cell.txtHeading.text = collectionArrayStr[indexPath.row]