问题描述
我有一个由两个表组成的数据库。一个保存 MenuItem
数据,另一个保存 MenuCategory
数据。我编写了一个简单的 sql 查询来返回每个表中的所有数据,然后我用它来将信息解码为我自己的数据模型:
struct MenuCategory: Codable {
var categoryID: Int
var categoryName: String
}
struct MenuItem: Codable {
let itemID: Int
let itemCategory: String
let itemName: String
let itemPrice: Double
let itemVegan: Bool
let itemvegetarian: Bool
let itemglutenFree: Bool
let itemPrepTime: Int
let itemDescription: String
let itemStatus: String
let itemStockCount: Int
}
对于我的 MenuViewController()
,我想根据 menuItems
在部分中显示 menuCategory
,因此创建了一个属性来保存每种类型的数组,这一切都很好使用 indexPath.section
和 indexPath.row
的要点。
我可以轻松地将 return menuCategories.count
用于 numberOfSections
并为 categoryName
返回 titleForHeaderInSection
但显然我希望 cellForRowAt
函数返回适当的 menuItems
该部分并根据 categoryName
动态执行此操作。
class MenuViewController {
var menuItems = [MenuItem]()
var menuCategories = [MenuCategory]()
func numberOfSections(in tableView: UITableView) -> Int {
return menuCategories.count
}
func tableView(_ tableView: UITableView,titleForHeaderInSection section: Int) -> String? {
return menuCategories[section].categoryName
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return menuItems.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: PropertyKeys.menuTableViewCell,for: indexPath)
let menuItem = menuItems[indexPath.row]
cell.textLabel?.text = menuItem.itemName
return cell
}
}
我已经从上面删除了很多代码以节省混乱的帖子,但我不确定我如何在这里使用两种不同的自定义类型并使它们很好地协同工作,或者我是否需要使用两种我想多了?!
我试过使用嵌套数组,但似乎无法为此方法使用两种不同的类型。我还尝试使用 menuCategory
名称作为键,然后使用 menuItems
作为值来创建字典,例如:var dictionary = [String: [MenuItem]]
。然后我想,如何将 [menuItem]?
属性添加到我的 MenuCategory
结构中作为可选,然后在收到数据后我可以设置每个 {{1} 的新添加的 menuItems: [MenuItem]?
属性}} 到具有相应 MenuCategory
的 menuItem
。这只是让我来回循环,搞了大约 2 个小时,但仍然没有得到它。
有来自数据库的参照完整性,所以我知道 itemCategory
实例的 .itemCategory
值确实与 MenuItem
实例的 .categoryName
属性匹配。
如果有人已经到了最后,我会很感激被指出正确的方向/指出我忽略的东西。谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)