NSIndexpath.item与NSIndexpath.row

Cyb*_*ass 73 uitableview nsindexpath ios

有谁知道之间的区别NSIndexpath.rowNSIndexpath.item

具体来说,我使用哪一个:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
Run Code Online (Sandbox Code Playgroud)

Owe*_*rey 187

好的,没有人在这里给出了一个好的答案.

在NSIndexPath内部,索引存储在一个名为"_indexes"的简单c数组中,该数组定义为NSUInteger*,数组的长度存储在定义为NSUInteger的"_length"中.访问者"section"是"_indexes [0]"的别名,"item"和"row"都是"_indexes [1]"的别名.因此,这两者在功能上是相同的.

在编程风格方面 - 也许是定义链 - 你最好在表的上下文中使用"row",在集合的上下文中使用"item".

  • 大!所以实际上没有任何区别. (26认同)

iPa*_*tel 27

indexPath.row is best in your case 
Run Code Online (Sandbox Code Playgroud)

关于NSIndexPath的第一个信息

所述NSIndexPath类表示嵌套数组集合树的路径的特定节点.此路径称为索引路径.

indexPath中的每个索引表示从树中的一个节点到另一个更深的节点的子数组的索引.

例如,indexPath 1.4.3.2指定了图中所示的路径 在此输入图像描述

在您的情况下,indexPath.row返回特定行的索引 indexPath.

之间的差异 indexPath.row and indexPath.item

一般indexPath两个属性

1

2

row -属性UITableView用于获取indexPath上的特定.它也是只读属性

 Available in iOS 2.0 and later.
Run Code Online (Sandbox Code Playgroud)

项目-正确地使用UICollectionView了GET 项目的部分.这是一个只读属性.要使用此属性,您需要在UICollectionView.h中声明它

>     Available in iOS 6.0 and later.
Run Code Online (Sandbox Code Playgroud)

  • 也许,但通常建议在答案本身中包含相关部分.鉴于其他答案的答案过于狭隘,我感谢有人指出更广泛使用"NSIndexPath". (22认同)
  • 我仍然没有看到indexPath.item,而问题之一就是indexPath.item和indexPath.row之间的区别.Midhun MP的回答是这样的.如果没有一些细节,只是复制粘贴文档没有多大帮助. (6认同)

Mid*_* MP 8

你需要使用 indexPath.row

区别在于:

indexPath.row用于tableView,indexPath.item用于collectionView.

项目

标识集合视图的某个部分中的项目的索引号.(只读)@property (nonatomic, readonly) NSInteger item;

讨论

项目所在的部分由部分的值标识.可用性

Available in iOS 6.0 and later.
Run Code Online (Sandbox Code Playgroud)

在UICollectionView.h中声明


标识表视图的一部分中的行的索引号.(只读)@property(nonatomic, readonly) NSInteger row;

讨论

行所在的部分由section的值标识.可用性

Available in iOS 2.0 and later.
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看NSIndexPath Additions

  • 从`UICollectionView {Delegate,DataSource}`访问`row`,或者从`UITableView {Delegate,DataSource}`访问`item`时会发生什么? (2认同)

小智 5

@Owen Godfrey 的答案比 @iPatel 接受的答案更好。这是一些进一步的说明,我无法将其纳入对他的答案的评论中,因此我将复制他的答案并添加到此处。功劳属于欧文。

\n\n
\n\n

来自@欧文·戈弗雷:

\n\n

在 NSIndexPath 内部,索引存储在一个名为“_indexes”的简单 C 数组中,定义为 NSUInteger*,数组的长度存储在定义为 NSUInteger* 的“_length”中。访问器“section”是“_indexes[0]”的别名,“item”和“row”都是“_indexes 1 ”的别名。因此两者在功能上是相同的。

\n\n

就编程风格 \xe2\x80\x93 以及定义链 \xe2\x80\x93 而言,您最好在表上下文中使用“行”,在集合上下文中使用“项目”。

\n\n
\n\n

NSIndexPath的核心接口定义在NSIndexPath.h中。索引的存储在 _indexes 中,它是 NSUInteger 的私有一维数组。NSIndexPath 本身可以表示任意数量的维度。NSIndexPath 上有两个相关类别扩展了功能,一类来自 UICollectionView.h“NSIndexPath (UICollectionViewAdditions)”,一类来自 UITableView.h“NSIndexPath (UITableView)”。UICollectionView.h 中的一个添加了只读属性“item”和相关的便捷方法。UITableView.h 中的一个添加了只读属性“row”和相关的便捷方法。然而,这两个属性只是访问 _indexes[1] 中的基础值的包装器。

\n\n

由于 UIKit 与这两个类别链接,因此无论您在 IOS 的哪个位置使用,两组便利功能始终可用。因此,您可以从 [NSIndexPath indexPathForRow:inSection:] 创建一个 NSIndexPath,但从 indexPath.item 检索第二个索引。无论是通过indexPath.item 还是indexPath.row 访问,底层值都是完全相同的。

\n\n

从风格上讲,如果您将“item”与 UICollectionView 一起使用,将“row”与 UITableView 一起使用,那么它会更干净,因为这就是它们的预期使用方式,这使得代码更具可读性。然而,如果你互换它们,你的程序不会崩溃。

\n\n

参考:NSIndexPath

\n