原始数据是JSON,下载并打包到名为Article.swift的Model Class中。 "物品"是它的元素。我们有
article.name = rawData["A_Name_Ch"] as! String
article.name_EN = rawData["A_Name_En"] as! String
article.location = rawData["A_Location"] as! String
article.image_URLString = rawData["A_Pic01_URL"] as? String
........
........
当如下所示在tableviewController上显示数据时,数据按照JSON中数据的原始序列排序。它由密钥" ID"排序。但是,在Swift 4上,如何通过AlphaBetic序列对它进行排序,参考关键字" article.name_EN"(英文)?
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive) {
return filtered.count
}
return articles.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ListTableCell", for: indexPath) as! ListTableCell
var article : Article
if(searchActive){ article = filtered[indexPath.row] }
else{ article = articles[indexPath.row] }
let imageURL: URL?
if let imageURLString = article.image_URLString {
imageURL = URL (string: imageURLString)
}
else { imageURL = nil }
if let c = cell as? ListTableCell {
c.nameLabel?.text = article.name;
c.name_ENLabel?.text = article.name_EN;
c.locationLabel?.text = article.location
}
}
return cell
}
答案 0 :(得分:1)
您需要按属性名称对数组的对象进行排序。
articles.sorted(by: { $0.name_EN > $1.name_EN })
对于Asc:
articles.sorted(by: { $0.name_EN < $1.name_EN })
您同时拥有已过滤的数组和原始数组。在填充到tableView
之前,在两个数组上应用排序。