如何检查IndexPath是否有效?
问题描述:
此前迅速3,我曾经使用例如:如何检查IndexPath是否有效?
let path = self.tableView.indexPathForSelectedRow
if (path != NSNotFound) {
//do something
}
但现在,因为我在swift3使用IndexPath
类,我正在寻找同等的path != NSNotFound
检查。
Xcode8.3.1编译器错误:“ '!=' 二元运算符不能应用于类型的 'IndexPath' 和 '诠释' 操作数”
答
语义上,需要考虑的一个indexPath 无效,你需要检查一些东西,比如表格视图或集合视图。
通常你可以考虑一个索引路径无效,如果它表示一个数据源中没有相应数据的行。 (其中一个例外是 “加载更多” 行)
如果你真的需要创建一个无效IndexPath
,你可以这样做:
let invalidIndexPath = IndexPath(row: NSNotFound, section: NSNotFound)
更新后:
self.tableView.indexPathForSelectedRow
返回一个可选项,如果没有选定的行,则返回nil
。
if let path = tableView.indexPathForSelectedRow {
// There is a selected row, so path is not nil.
}
else {
// No row is selected.
}
反正比较path
对NSNotFound
提出在所有情况下的例外。
答
要检查是否存在IndexPath
,我用这个扩展功能:
import UIKit
extension UITableView {
func hasRowAtIndexPath(indexPath: NSIndexPath) -> Bool {
return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRows(inSection: indexPath.section)
}
}
,并使用它,我做这样的事情:
if tableView.hasRowAtIndexPath(indexPath: indexPath as NSIndexPath) {
// do something
}
你为什么要检查这个样子?由于您无法将“NSIndexPath”与“NSNotFound”进行比较,因此代码无法工作。 – rmaddy
NSIndexPath初始化程序只是简单地创建一个对象。您希望以什么方式初始化一个NSIndexPath,它是'NotFound'?这不是查询。您可能会将它与'indexOf'混合在一起,它会返回一个可以检查为零的可选项。 – bauerMusic
@bauerMusic,那只是一个不好的例子。我更多地指的是返回IndexPath的方法。这将是一个更好的例子;)更新了问题 – Lirik