Lir*_*rik 5 nsindexpath ios swift swift3 indexpath
在swift 3之前,我习惯使用例如:
let path = self.tableView.indexPathForSelectedRow
if (path != NSNotFound) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
但是现在,因为我IndexPath在swift3中使用了类,所以我正在寻找等价的 path != NSNotFound支票.
Xcode8.3.1编译器错误: "二进制运算符'!='不能应用于'IndexPath'和'Int'类型的操作数"
ozg*_*gur 10
从语义上讲,要将indexPath视为无效,您需要检查一些内容,例如表视图或集合视图.
通常,如果indexPath表示数据源中没有相应数据的行,则可以认为它是无效的.(一个例外是"加载更多"行.)
如果你真的需要创建一个无效的IndexPath,你可以这样做:
let invalidIndexPath = IndexPath(row: NSNotFound, section: NSNotFound)
Run Code Online (Sandbox Code Playgroud)
更新后:
self.tableView.indexPathForSelectedRownil如果没有选定的行,则返回一个Optional .
if let path = tableView.indexPathForSelectedRow {
// There is a selected row, so path is not nil.
}
else {
// No row is selected.
}
Run Code Online (Sandbox Code Playgroud)
总之,比较path反对NSNotFound提高在所有情况下的例外.
要检查是否IndexPath存在,我使用以下扩展功能:
import UIKit
extension UITableView {
func hasRowAtIndexPath(indexPath: NSIndexPath) -> Bool {
return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRows(inSection: indexPath.section)
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它来做这样的事情:
if tableView.hasRowAtIndexPath(indexPath: indexPath as NSIndexPath) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4337 次 |
| 最近记录: |