What would be a good data structure for UITableView in grouped mode

余生颓废 提交于 2020-01-28 09:40:23

问题


Usually I store data in an array. Then, when cellForRowAtIndexPath is called I just look at row and select an item on the array based on row and process.

But UITableView as we know can do group view.

So what should I do?

Should I have an array of array? An NSDictionary of array? What would be the most elegant way to store data in UITableView structure?


回答1:


For example an array of dictionaries, where each dictionary holds the title and all items of one section:

NSArray *dataSource = @[
                    @{@"title": @"Section 0",
                      @"rows" : @[ item00, item01, item02] },
                    @{@"title": @"Section 1",
                      @"rows" : @[ item10, item11, item12] },
                    @{@"title": @"Section 2",
                      @"rows" : @[ item20, item21, item22] },
                    ];

The items can be strings or objects of a custom class. Then you can access each item in cellForRowAtIndexPath like

Item *item = dataSource[indexPath.section][@"rows"][indexPath.row];

and all other data source methods are also easily implemented.




回答2:


@Martin answer is correct for Objective-C but in Swift, we don't have the luxury of having variable types for a dictionary. The types are predefined.

We will need use struct or custom data type to work around.

struct Model<Item>{
  let title: String
  let rows: [Item]

  subscript(index: String) -> [Item] {
    get {
      return rows
    }
  }
}

let model1 = Model(title: "Secton 0", rows: ["A", "B", "C"])
let model2 = Model(title: "Secton 1", rows: ["D", "E", "F"])

let dataSource = [model1, model2]

// You can query
dataSource[indexPath.section][rows][indexPath.row]


来源:https://stackoverflow.com/questions/20216902/what-would-be-a-good-data-structure-for-uitableview-in-grouped-mode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!