初始化@State变量时,如何避免SwiftUI Initial View被多次初始化?

How to avoid SwiftUI Initial View getting initialized multiple times when @State variables are initialized?

struct GroceryList: View {
  @ObservedObject var coreDataViewModel:CoreDataViewModel = CoreDataViewModel() 
  @StateObject var userPreferences: UserPreferences = UserPreferences()
  @State private var selectedItemsInList: [GroceryItem] = []
  @State private var selection = Set<UUID>()//for check box
  @State private var activeTab:Int = 0 //for active tab

当 @State 变量 selectionactiveTab 被初始化时,上面的视图被初始化了 3 次。我在 GroceryList: View 中有一个 init(),如下所示:

 init() 
{
   print("Grocery List View")
}

Grocery List View 打印三次。

由于我首先实例化并初始化了一个CoreData View Model,它的fetchItems()在CoreDataViewModel init中也做了三次。

如何避免多次初始化?

这是我在开发阶段的第一个 SwiftUI 应用程序,非常感谢learning.Any 指点。

CoreDataViewModel 初始化 3 次肯定是因为你有 @ObservedObject,而你必须有 @StateObject。或者你可以将这个视图模型作为参数注入,留下 @ObservedObject。或者您可以将 @EnvironmentObject.environmentObject() 视图修饰符结合使用。

此外,如果通过“视图初始化”3 次,您的意思是它的 onAppear 被多次调用 - 这意味着您的视图没有稳定的标识。检查 Demystifying SwiftUI 谈话以了解更多信息,但简而言之,您需要确保视图具有稳定的结构标识,and/or 显式 .id() 标识。