【问题标题】:How to create subarrays without duplication Swift如何在没有重复的情况下创建子数组 Swift
【发布时间】:2021-07-27 03:04:51
【问题描述】:

我的 SwiftUI 项目中有一个 Meal 结构

struct Meal: Identifiable, Codable, Equatable {
    var id = UUID().uuidString
    var name: String
    var time: String
    var type: String
    var recommendation: Bool    
}

我也有 ContentViewModel 类

class ContentViewModel: ObservableObject {
        
    init() {
        
        let allItemsInit = Bundle.main.decode([Meal].self, from: "menu.json")
        self.allItems = allItemsInit
        
        self.recomendationItems = allItemsInit.filter {$0.recommendation == true}
     }
    
    @Published var allItems: [Meal] = []
    @Published var recomendationItems: [Meal] = []
}

我只是将某些元素分配给新的recomendationItems数组,从而复制它们,这是一种正确的方法吗?

recomendationItems - 只是示例,会有大量这样的子数组。

【问题讨论】:

    标签: arrays swift swiftui duplicates sub-array


    【解决方案1】:

    您不需要“子数组”——只要allItems 更改,您的View 就会更新,因此您可以使用其他计算属性来提供子数组,而不是让它们成为真正的独立容器。

    例如:

    class ContentViewModel: ObservableObject {
            
        init() {        
            self.allItems = Bundle.main.decode([Meal].self, from: "menu.json")
         }
        
        @Published var allItems: [Meal] = []
    
        var recommendedItems: [Meal] {
          return allItems.filter {$0.recommendation == true}
        }
    }
    

    【讨论】:

    • 谢谢。但是,如果我每周 7 天需要 3 组早餐、午餐和晚餐,该怎么办?这会产生 21 个数组。制作 21 个类字段可能不是最好的主意。
    • 为什么不创建一个函数来获取这些参数和基于它们的过滤器。像func recommendations(meal: MealTime, dayOfWeek: DayOfWeek) -> [Meal] 这样的东西?我只是按照您在问题中提出的示例进行操作,但您绝对可以过滤更多属性。
    • Meal结构多出21个字段正常吗? struct Meal: Identifiable, Codable, Equatable { var id = UUID().uuidString var name: String var time: String var type: String var 推荐: Bool var mondayBreakfast: Bool var mondayLunch: Bool var mondayDinner: Bool ... }
    • 看起来你的代码在那里被截断了,但对我来说,这似乎是一种有问题的数据结构方式——你可能会更有效地使用它。但是,是的,如果您有 21 个字段,则必须对它们进行不同的过滤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2021-01-12
    相关资源
    最近更新 更多