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