web-dev-qa-db-fra.com

NSIndexPath et IndexPath dans Swift 3.0

J'ai récemment converti mon code en Swift 3.0. Mes méthodes de source de données de vue de collection et de table contiennent désormais IndexPath au lieu de NSIndexPath dans leur signature de méthode. Mais toujours dans la définition de la méthode, il s'agit de transtyper IndexPath en NSIndexPath.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        let cell : NNAmenitiesOrFurnishingCollectionViewCell = self.amenitiesOrFurnishingCollectionView.dequeueReusableCell(withReuseIdentifier: "NNAmenitiesOrFurnishingCollectionViewCell", for: indexPath) as! NNAmenitiesOrFurnishingCollectionViewCell
        cell.facilityImageName = self.facilityArray[(indexPath as NSIndexPath).row].imageName
        cell.facilityLabelString = self.facilityArray[(indexPath as NSIndexPath).row].labelText
        return cell
    }

Quelqu'un peut-il me dire pourquoi indexPath est converti en NSIndexPath.

16
PGDev

Il n'y a aucune raison de convertir IndexPath en NSIndexPath ici. Le type de superposition Swift 3 IndexPath a des propriétés

/// The section of this index path, when used with `UITableView`.
///
/// - precondition: The index path must have exactly two elements.
public var section: Int

/// The row of this index path, when used with `UITableView`.
///
/// - precondition: The index path must have exactly two elements.
public var row: Int

auquel vous pouvez accéder directement:

    cell.facilityImageName = self.facilityArray[indexPath.row].imageName
    cell.facilityLabelString = self.facilityArray[indexPath.row].labelText

Apparemment, le migrateur Xcode n'a pas fait un travail parfait.

27
Martin R