2017-04-25 142 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 
}