Arrays SwiftUI数组列表

Arrays SwiftUI数组列表,arrays,swift,swiftui,Arrays,Swift,Swiftui,我创建了一个包含存储数据的食品列表,如卡路里、蛋白质、类别等。我创建了一个类别数组,以便将这些产品分类,现在我试图在说明每个产品中的数据时引用此数组,但在执行此操作时(第16行中的苹果变量),我得到错误: “无法在属性初始值设定项中使用实例成员‘类别’;属性初始值设定项在‘self’可用之前运行” 这是我的代码: struct Product : Identifiable { var id = UUID() var productName : String var cal

我创建了一个包含存储数据的食品列表,如卡路里、蛋白质、类别等。我创建了一个类别数组,以便将这些产品分类,现在我试图在说明每个产品中的数据时引用此数组,但在执行此操作时(第16行中的苹果变量),我得到错误:
“无法在属性初始值设定项中使用实例成员‘类别’;属性初始值设定项在‘self’可用之前运行”

这是我的代码:

struct Product : Identifiable {
    var id = UUID()
    var productName : String
    var calories : Double
    var protein : Double
    var carbs : Double
    var fats : Double
    var weight : Double
    var category : String
    
}

struct Data {
    @State var categories = ["Animal Products", "Dairy", "Fast Food", "Fruits", "Grains", "Nuts", "Vegetables", "Wheat"]
    
    var Apple = Product(productName: "Apple", calories: 52, protein: 0.3, carbs: 14, fats: 0.2, weight: 80, category: categories[3])
    var Avocado = Product(productName: "Avocado", calories: 160, protein: 2, carbs: 9, fats: 15, weight: 600, category: <#T##String#>)
    var Banana = Product(productName: "Banana", calories: 89, protein: 1.1, carbs: 23, fats: 0.3, weight: 120, category: <#T##String#>)
    var Broccoli = Product(productName: "Broccoli", calories: 34, protein: 2.8, carbs: 5, fats: 0.4, weight: 225, category: <#T##String#>)
    var Burger = Product(productName: "Burger", calories: 264, protein: 13, carbs: 30, fats: 10, weight: 110, category: <#T##String#>)
    var Carrot = Product(productName: "Carrot", calories: 41, protein: 0.9, carbs: 10, fats: 0.2, weight: 61, category: <#T##String#>)
    var Cheerios = Product(productName: "Cheerios", calories: 379, protein: 6, carbs: 83, fats: 5, weight: 40, category: <#T##String#>)
    var Cherry = Product(productName: "Cherry", calories: 50, protein: 1, carbs: 12, fats: 0.3, weight: 5, category: <#T##String#>)
}
struct产品:可识别{
var id=UUID()
var productName:字符串
热量:双倍
var蛋白:双
var碳水化合物:双
脂肪:双份
重量:双倍
变量类别:字符串
}
结构数据{
@州var类别=[“动物产品”、“乳制品”、“快餐”、“水果”、“谷物”、“坚果”、“蔬菜”、“小麦”]
var Apple=产品(产品名称:“苹果”,卡路里:52,蛋白质:0.3,碳水化合物:14,脂肪:0.2,体重:80,类别:类别[3])
var Avocado=产品(产品名称:“Avocado”,卡路里:160,蛋白质:2,碳水化合物:9,脂肪:15,重量:600,类别:)
var Banana=产品(产品名称:“香蕉”,卡路里:89,蛋白质:1.1,碳水化合物:23,脂肪:0.3,重量:120,类别:)
var花椰菜=产品(产品名称:“花椰菜”,卡路里:34,蛋白质:2.8,碳水化合物:5,脂肪:0.4,重量:225,类别:)
var Burger=产品(产品名称:“汉堡”,卡路里:264,蛋白质:13,碳水化合物:30,脂肪:10,体重:110,类别:)
var Carrot=产品(产品名称:“胡萝卜”,卡路里:41,蛋白质:0.9,碳水化合物:10,脂肪:0.2,体重:61,类别:)
var Cheerios=产品(产品名称:“Cheerios”,卡路里:379,蛋白质:6,碳水化合物:83,脂肪:5,体重:40,类别:)
var Cherry=产品(产品名称:“Cherry”,卡路里:50,蛋白质:1,碳水化合物:12,脂肪:0.3,重量:5,类别:)
}

如何将此数组包含在产品列表中?

看起来
类别是预定义的,那么下面是一个针对您的案例的解决方案-使
类别
静态常量:

struct Data {
    static let categories = ["Animal Products", "Dairy", "Fast Food", "Fruits", "Grains", "Nuts", "Vegetables", "Wheat"]

    var Apple = Product(productName: "Apple", calories: 52, protein: 0.3, 
                  carbs: 14, fats: 0.2, weight: 80, category: categories[3])
   
    //  ... others
}

首先,以小写字母开始命名属性是一种快捷命名约定。第二个Swift已经有一个名为Data的本机结构。为了避免含糊不清,你应该给它起个名字。有很多方法可以解决你的问题。最简单的方法是将变量声明为
lazy
是否可以更改de categories?另外,为什么需要将categories设置为
@State
?您不需要
Self.categories[3]
?@pawello2222,不,编译器了解范围,至少是Xcode 12/swift 5.3。