如何显示decks.status == true
的数据,并忽略设置为false的对象?
数据:
var decks: [DeckOfCards]
我现在得到的是:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell
if (thedeck.decks[indexPath.row].status == true) {
cell.label.text = "\(thedeck.decks[indexPath.row].card.name)"
}
}
最佳答案
你这样做是不对的。当您到达cellForRowAtIndexPath
时,您已经声明一个单元格应该为这个索引路径(因此在数据数组中的这个索引处)退出队列。进行此筛选的正确位置在数据源中。
例如,除了decks
数组之外,还可以生成计算属性(filteredDecks
),该属性通过过滤decks
数组来获取其值。
var decks = [DeckOfCards]
var filteredDecks: [DeckOfCards] {
return decks.filter { $0.status }
}
然后可以将此属性用作表视图的数据源。
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredDecks.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.label.text = "\(filteredDecks[indexPath.row].card.name)"
return cell
}
现在,由于这个解决方案在每个属性访问上计算
filteredDecks
数组,如果decks
是一个大数组,或者您经常重新加载表视图,那么它可能不是最好的方法。如果是这种情况,并且可以这样做,那么您应该首选使用上面computed属性中显示的相同方法提前过滤decks
数组。关于swift - 如何仅显示表格中的过滤数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31489461/