2017-04-25 144 views
3

此前迅速3,我曾经使用例如:如何检查IndexPath是否有效?

let path = self.tableView.indexPathForSelectedRow 
if (path != NSNotFound) { 
//do something 
} 

但现在,因为我在swift3使用IndexPath类,我正在寻找同等的path != NSNotFound检查。

Xcode8.3.1编译器错误:“ '!=' 二元运算符不能应用于类型的 'IndexPath' 和 '诠释' 操作数”

+3

你为什么要检查这个样子?由于您无法将“NSIndexPath”与“NSNotFound”进行比较,因此代码无法工作。 – rmaddy

+1

NSIndexPath初始化程序只是简单地创建一个对象。您希望以什么方式初始化一个NSIndexPath,它是'NotFound'?这不是查询。您可能会将它与'indexOf'混合在一起,它会返回一个可以检查为零的可选项。 – bauerMusic

+0

@bauerMusic,那只是一个不好的例子。我更多地指的是返回IndexPath的方法。这将是一个更好的例子;)更新了问题 – Lirik

回答

8

语义上,需要考虑的一个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. 
} 

反正比较pathNSNotFound提出在所有情况下的例外。

+0

对不起,我的例子并不清楚。更新了这个例子。我指的是返回indexPath的方法。 – Lirik

+0

谢谢。这就说得通了。 – Lirik

2

要检查是否存在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 
}