【发布时间】:2021-08-01 20:08:09
【问题描述】:
这段代码的执行让我很困惑:
class RecipeListViewModel: ObservableObject {
@Published var recipeList = [RecipeViewModel]()
init(){
RecipeRepository.$allRecipeVMs.map { recipes in
recipes.map { recipe in
recipe
}
}
.assign(to: &$recipeList)
}
}
我的理解是 SwiftUI 发布者是单向的,这意味着当 RecipeRepository.allRecipeVMs 被修改时,recipeList 也是如此。但是,我看到的行为是当recipeList 更新时,RecipeRepository.allRecipeVMs 也会更新。我试图找到这方面的文档,但似乎找不到任何东西。
这里是RecipeViewModel 类,不确定是否有用:
class RecipeViewModel : Identifiable, ObservableObject, Hashable{
var id = UUID().uuidString
@Published var recipe: Recipe
init(recipe: Recipe){
self.recipe = recipe
}
}
【问题讨论】:
-
您能否附上一个minimal reproducible example 来证明您所描述的内容?例如,我想看看
RecipeRepository中的内容...我对allRecipeVMs持怀疑态度 -
@jnpdx 我将致力于创建一个可重现的示例,但 allRecipeVMs 是 [RecipeViewModel]。
-
这是一个危险信号,你有一个由
ObservableObject组成的@Published数组——这不会像你期望的那样工作。