如何在tableView中对单元格进行排序?
我有结构和数组:
struct Converter {
let title: String
let kf: Double
}
let converterAtmo = [
Converter(title: "Атмосферы", kf: 1),
Converter(title: "Бары", kf: 365.2422),
Converter(title: "Мм.рт.ст.", kf: 11.999998),
Converter(title: "Паскали", kf: 525948.77),
Converter(title: "Фунт./кв.дюйм", kf: 52.177457)]
CellAtRow
func中的:
let cell1 = tableView.dequeueReusableCell(withIdentifier: "resultCell") as! resultTableViewCell
let item = converterAtmo[indexPath.row]
cell1.nameResult.text = item.title
cell1.labelResult.text = String(item.kf * atmosfera)
return cell1
最后@IBAction
:
@IBAction func sortAlphabet(_ sender: Any) {
let itemSort = converterAtmo
itemSort.sorted { $0.title < $1.title }
self.tableView2.reloadData()
}
但它不起作用......
我的问题是什么?
答案 0 :(得分:5)
首先,您必须将converterAtmo
声明为var
而不是let
,以便您可以对其进行修改。
然后替换:
itemSort.sorted { $0.title < $1.title }
使用:
self.converterAtmo = itemSort.sorted { $0.title < $1.title }
在您当前的实现中,您对模型的副本进行排序(itemSort
只是self.converterAtmo
的副本),因此它对tableView后面的模型没有任何影响。您需要将已排序的数组设置回tableView数据模型。
甚至更好,你可以使用它:
@IBAction func sortAlphabet(_ sender: Any) {
// `sort` method will sort the converterAtmo (`sorted` method leaves the original
// array untouched and returns a sorted copy)
self.converterAtmo.sort { $0.title < $1.title }
self.tableView2.reloadData()
}
答案 1 :(得分:0)
在:
let itemSort = converterAtmo
itemSort.sorted { $0.title < $1.title }
您实际上并没有对数组进行排序。你正在'itemSort'中复制它而不用它做任何事情。