web-dev-qa-db-ja.com

NSIndexPathおよびSwift 3.0のIndexPath

最近、コードをSwift 3.0に変換しました。コレクションビューとテーブルビューのデータソースメソッドには、メソッドシグネチャにIndexPathではなくNSIndexPathが含まれるようになりました。まだメソッド定義の内部で、IndexPathを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
    }

indexPathNSIndexPathに型キャストされる理由を教えてください。

16
PGDev

ここでIndexPathNSIndexPathにキャストする理由はありません。 Swift 3オーバーレイタイプIndexPathにはプロパティがあります

/// 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

直接アクセスできます:

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

どうやら、Xcode migratorは完璧な仕事をしていなかったようです。

27
Martin R