SwiftUI 数组列表

Posted

技术标签:

【中文标题】SwiftUI 数组列表【英文标题】:SwiftUI Array List 【发布时间】:2020-10-13 21:52:08 【问题描述】:

我创建了一个食品列表,其中包含卡路里、蛋白质、类别等存储数据。我创建了一系列类别,以便将这些产品分类,我现在正在尝试引用这个声明每个产品中的数据时的数组,但是这样做时(第 16 行中的 Apple 变量)我收到错误:“不能在属性初始化程序中使用实例成员“类别”;属性初始化程序在“自我”之前运行可用”

这是我的代码:

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#>)

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

【问题讨论】:

首先,Swift 命名约定以小写字母开头命名您的属性。第二个 Swift 已经有一个名为 Data 的原生结构。您应该将其命名为其他名称以避免歧义 有很多方法可以解决您的问题。最简单的一种是将变量声明为lazy 可以更改类别吗? 另外,为什么你需要类别才能成为@State 【参考方案1】:

看起来categories 是预定义的,那么这里有一个适合您情况的解决方案 - 将categories 设为静态常量:

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

【讨论】:

你不需要Self.categories[3]吗? @pawello2222,不,编译器理解范围,至少 Xcode 12 / swift 5.3。

以上是关于SwiftUI 数组列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .reversed() 处理 SwiftUI 列表数组的 .onDelete

当列表填充数组时,如何在 SwiftUI 中获取列表中元素的索引?

SwiftUI 数组列表

swiftui列表没有出现但数组不为空

在 SwiftUI 中从数据模型中搜索数组

删除最后一个数组元素时,SwiftUI列表ForEach索引超出范围