我正在尝试使用SwiftUI创建一个iOS应用。我的数据存储在Google Firebase实时数据库中。我将数据提取到ObservableObject,以便在添加或删除数据时可以动态加载UI。 但是由于某种原因,对于Text(),我总是会收到错误消息“表达式的类型是模棱两可的,没有更多上下文”。
我已经尝试删除if语句和Text(),但是在其他地方却遇到了错误。例如。我还必须写
HStack{ ... }.padding(.leading, CGFloat(20))
如果我不将20转换为CGFloat,则会收到错误“'CGFloat'无法转换为'CGFloat?'”。 我知道SwiftUI的错误消息还不够好,因为将近90%的代码错误会导致一些模糊的bla错误。但是在这里,我真的不知道这些错误是从哪里来的。
import SwiftUI
struct IngredientsTab: View {
@ObservedObject var ingredientsVM: IngredientViewModel = IngredientViewModel()
var body: some View {
NavigationView {
List {
ForEach(ingredientsVM.ingredients, id: \.self){ (ingredient) in
NavigationLink(destination: IngredientDetailView(ingredient: ingredient)){
VStack {
HStack {
Text(ingredient.name)
Spacer()
if (Type.NONALC == ingredient.type) {
self.modifier(LabelViewModifier(label: "Non-alcoholic", backgroundColor: .green))
} else {
self.modifier(LabelViewModifier(label: "Alcoholic", backgroundColor: .red))
}
}
if (ingredient.pieceGood) {
HStack {
Image(systemName: "checkmark.circle.fill")
.foregroundColor(Color.green)
Text("Piece good") // Here I'm getting the error
Spacer()
}
.padding(.leading, 20)
}
}
}
}
}
}
}
}
所以它似乎与SwiftUI有某种联系(因为它显然还不能完美运行),但也与Cocoapods / Firebase有关。在另一个项目中,我有一个类似的方法,但是没有使用任何Pod,并且工作正常。
答案 0 :(得分:1)
我终于找到了问题。 我的成分继承自Identifiable,但也继承自NSObject。结合一些错误的构造函数并编写
id: \.self
在ForEach循环中的导致了这种奇怪的行为。我将我的成分更新为正确的模型,并从ForEach循环中删除了上面的行,然后起作用了。
谢谢您的帮助!
PS:它与任何Pod或Firebase都不相关;)