1
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

上面的 View 在 @State 变量selection和初始化时被初始化了 3 次activeTab。我有一个如下所示init()GroceryList: View

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

Grocery List View被打印三次。

由于我首先实例化并初始化了一个 CoreData 视图模型,因此它fetchItems()在 CoreDataViewModel 的 init 中也进行了三次。

如何避免多次初始化?

这是我在开发阶段的第一个具有自学能力的 SwiftUI 应用程序。非常感谢任何指针。

4

1 回答 1

0

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

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

于 2021-08-29T09:53:55.743 回答