无法用名称填充tableview

我需要填充我的tableview只是名称的类别。 当我填充tableview它显示这个…

Category(name: "Sandwiches & Burgers", items: []) 

在哪里我追加我的所有信息…

  let sortedKeys = newArray.sorted{$0.0 < $1.0} let shake = Item(name: "Shake", carbs: 20) let fries = Item(name: "Fries", carbs: 30) let beverages = Category(name: "Beverages", items: [shake]) let chips_fries = Category(name: "Chips & Fries", items: [fries]) let desserts = Category(name: "Desserts", items: []) let other = Category(name: "Other Menu Items", items: []) let sandwiches_burgers = Category(name: "Sandwiches & Burgers", items: []) let sides = Category(name: "Sides", items: []) a_w = Restaurant(name: "A&W", categories: [beverages, chips_fries, desserts, other, sandwiches_burgers, sides]) menuArray = [a_w] 

然后我的class

 struct Item { let name: String let carbs: Int } struct Category { let name: String let items: [Item] } struct Restaurant { let name: String let categories: [Category] } 

这里是我填充的地方…

 var currentRestaurant:Restaurant! var menuArray:[Restaurant] = [] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var array = currentRestaurant.categories print(array) let currentCell = tableView.dequeueReusableCell(withIdentifier: "cell")! currentCell.textLabel?.text = String(describing: array[indexPath.item]) return currentCell } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return currentRestaurant.categories.count } 

看看你的数据源cellForRowAt应该是:

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) let category = currentRestaurant.categories[indexPath.row] cell.textLabel!.text = category.name return cell } 

但在重新加载表视图之前,您必须将currentRestaurant设置为menuArray[0]


实际上,处理这种数据源的通常方式是分段显示餐馆。

请将数据源数组声明为比menuArray更具描述性的名称

 var restaurants = [Restaurant]() 

然后返回numberOfSections中的餐馆数量

 override func numberOfSections(in tableView: UITableView) -> Int { return restaurants.count } 

numberOfRowsInSection的类别数目

 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let restaurant = restaurants[section] return restaurant.categories.count } 

cellForRow

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) let restaurant = restaurants[indexPath.section] let category = restaurant.categories[indexPath.row] cell.textLabel!.text = category.name return cell } 

用这种方法你根本不需要currentRestaurant

viewDidLoad填充数据源数组并重新加载表视图

 override func viewDidLoad() { super.viewDidLoad() let shake = Item(name: "Shake", carbs: 20) let fries = Item(name: "Fries", carbs: 30) let beverages = Category(name: "Beverages", items: [shake]) let chips_fries = Category(name: "Chips & Fries", items: [fries]) let desserts = Category(name: "Desserts", items: []) let other = Category(name: "Other Menu Items", items: []) let sandwiches_burgers = Category(name: "Sandwiches & Burgers", items: []) let sides = Category(name: "Sides", items: []) restaurants = [Restaurant(name: "A&W", categories: [beverages, chips_fries, desserts, other, sandwiches_burgers, sides])] tableView.reloadData() }