如何显示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)"
}
}
答案 0 :(得分:1)
你可以在甲板上使用过滤功能
let filteredDecks = decks.filter({$0.status})
答案 1 :(得分:1)
将数组过滤为
self.decks = self.decks.filter {
(d: DeckOfCards) -> Bool in
return d.status == true
}
现在您的数组将具有过滤值。你不需要检查status
函数内的cellForRowAtIndexPath
。
答案 2 :(得分:1)
你以错误的方式解决这个问题。到达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
是一个大数组,或者您经常重新加载表视图,它可能不是最好的方法。如果是这种情况,并且可以这样做,您应该使用上面计算属性中显示的相同方法提前过滤decks
数组。