问题描述
我收到错误无法调用非函数类型“[Ingredient]”的值,不知道为什么。
在 Main.xcdatamodeld 中创建的 My Recipe 类包含许多关于任何配方的数据,包括 名称:字符串
python3 -v
我有一个结构 RecipeListView,它调用 RecipeDetailView。 RecipeDetailView的调用如下:
extension Recipe {
enum SortOrder {
case title,category
}
var recipeName: String {
name ?? ""
}
var recipeIngredients: [Ingredient] {
ingredients?.allObjects as? [Ingredient] ?? []
}
}
在 RecipeDetailView 中,我试图列出所选配方(传入的)的成分,如:
import SwiftUI
struct RecipeListView: View {
@EnvironmentObject var dataController: DataController
@Environment(\.managedobjectContext) var managedobjectContext
@State private var sortOrder = Recipe.sortOrder.title
let recipes: FetchRequest<Recipe>
init() {
recipes = FetchRequest<Recipe>(entity: Recipe.entity(),sortDescriptors: [
NSSortDescriptor(keyPath: \Recipe.name,ascending: true)
])
}
var body: some View {
NavigationView {
ScrollView {
vstack(alignment: .leading) {
ForEach(recipes.wrappedValue) { recipe in
NavigationLink(destination:
RecipeDetailView(recipe: recipe)) {
Text(recipe.recipeName)
.padding([.horizontal])
}
}
}
}
.navigationTitle("Recipes")
}
}
}
在 ForEach 行上,我收到错误消息(recipeIngredients 中 c 下的标记),但 recipe 是通过调用传入的,并且 recipe.recipeIngredients 和 sortOrder 在扩展中定义。而且,成分名称在 Main.xcdatamodeld 中定义。 我尝试在 init 中添加一行“var selectedRecipe = recipe”,然后在 ForEach 中使用 selectedRecipe.recipeIngredients。我已经尝试过 recipe.ingredient 和 recipe.recipeIngredient 作为 ForEach 的用途。我试过在 recipe.ingredients 和成分上做 ForEach。一切都无济于事。似乎错误告诉我我需要在 ForEach 中调用函数,这毫无意义。任何帮助表示赞赏。 谢谢, 账单
解决方法
你有房产
var recipeIngredients: [Ingredient] {
ingredients?.allObjects as? [Ingredient] ?? []
}
但是在您的 ForEach 中,您像调用函数一样调用它
ForEach(recipe.recipeIngredients(using: sortOrder)) {
所以错误信息很有意义。所以首先将其更改为
ForEach(recipe.recipeIngredients) {
并提前对其进行排序或执行类似操作
ForEach(recipe.recipeIngredients.sorted(by: { <your sort logic here> }) {