微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 UITableView 仍然使用 indexPath.section 和 indexPath.row 的同时使用两种自定义类型

如何解决如何在 UITableView 仍然使用 indexPath.section 和 indexPath.row 的同时使用两种自定义类型

我有一个由两个表组成的数据库一个保存 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.sectionindexPath.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]? 属性}} 到具有相应 MenuCategorymenuItem。这只是让我来回循环,搞了大约 2 个小时,但仍然没有得到它。 有来自数据库的参照完整性,所以我知道 itemCategory 实例的 .itemCategory 值确实与 MenuItem 实例的 .categoryName 属性匹配。 如果有人已经到了最后,我会很感激被指出正确的方向/指出我忽略的东西。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。