如何从 swift 中的结构对 TableView 项目进行分组?

How can I group TableView items from a struct in swift?

在我的例子中,我有数据结构,我想在表视图中使用值 _host 到 titleForHeaderInSection 并按 _host 数据分组

  var polozkyuctu = [polozky]()
    
    struct polozky: Codable {
        let _id: Int
        let _recept: String
        let _host: String
        }
Data in polozkyuctu:
[Cheers.Ucet.polozky(_id: 453741,  _recept: "BECHEROVKA 1L", _host: "0"), 
Cheers.Ucet.polozky(_id: 453718,  _recept: "PALAČINKY DEZERT", _host: "10“), 
Cheers.Ucet.polozky(_id: 453719,  _recept: "TLAČENKA SVĚTLÁ S CIBULÍ", _host: "10“),
Cheers.Ucet.polozky(_id: 453720,  _recept: "PAŠTIKA JÁTROVÁ",  _host: "0"), 
Cheers.Ucet.polozky(_id: 453737,  _recept: "ABSINTH ŽUFÁNEK 0,5L", _host: "2")]

extension Ucet: UITableViewDataSource {
      
        func numberOfSections(in tableView: UITableView) -> Int {
         
            let hh = Dictionary(grouping: polozkyuctu, by: { (element: polozky) in
                return element._host })
            
            print ("hostcount: \(hh.count)")
            // hostcount: 3
            return hh.count
        }
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return ???
             }
        
        func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
            return „Title \(???)“
           }
            
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
           let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
          ???

        return cell
            
        }
    

如何正确地适应“部分”以便结果在数据表中看起来像这样?

标题 0
BECHEROVKA 1L
肝膏

标题 2
苦艾酒连衣裙 0.5L

标题 10
煎饼甜点
洋葱灯按钮

除非你有一个庞大的数据集,否则你应该转换你的数组,以便你可以轻松地读出所需的值:

struct Polozky: Codable {
        let _id: Int
        let _recept: String
        let _host: String
        }
let data = [Polozky(_id: 453741,  _recept: "BECHEROVKA 1L", _host: "0"),
            Polozky(_id: 453718,  _recept: "PALAČINKY DEZERT", _host: "10"),
            Polozky(_id: 453719,  _recept: "TLAČENKA SVĚTLÁ S CIBULÍ", _host: "10"),
            Polozky(_id: 453720,  _recept: "PAŠTIKA JÁTROVÁ",  _host: "0"),
            Polozky(_id: 453737,  _recept: "ABSINTH ŽUFÁNEK 0,5L", _host: "2")]


// transform your data 
let grouped = Dictionary(grouping: data, by: { [=10=]._host })
let sorted = grouped.sorted { [=10=].key.localizedStandardCompare(.key) == .orderedAscending }
// now easily get you datasource values like so
let someSection = 1
let sectionTitle = sorted[someSection].key             // "2"
let sectionRowCount = sorted[someSection].value.count  // 1