初始化@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 变量 selection
和 activeTab
被初始化时,上面的视图被初始化了 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()
标识。
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 变量 selection
和 activeTab
被初始化时,上面的视图被初始化了 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()
标识。