gpt4 book ai didi

swift - 为 ObservedObject 和 State 对象配置预览

转载 作者:行者123 更新时间:2023-12-05 03:16:46 25 4
gpt4 key购买 nike

所以我仍在学习 Swift,出于某种原因,我在预览以及如何配置方面遇到了最大的麻烦。

所以我有以下代码:

struct MainView: View {

// The app's model that the containing scene passes in
@ObservedObject var model: MainViewModel
@State var activeTab = 0

var body: some View {
VStack {
TabView(selection: $activeTab) {
Group {
WorldView(model: model, activeTab: $activeTab)
.tabItem {
Label(Tabs.explore.rawValue, systemImage: Tabs.explore.icon)
.environment(\.symbolVariants, .none)
}
.tag(0)
ListView(model: model, activeTab: $activeTab)
.tabItem {
Label(Tabs.list.rawValue, systemImage: Tabs.list.icon)
.environment(\.symbolVariants, .none)
}
.tag(1)
FavoritesView(activeTab: $activeTab)
.tabItem {
Label(Tabs.favorite.rawValue, systemImage: Tabs.favorite.icon)
.environment(\.symbolVariants, .none)
}
.tag(2)
ProfileView(model: model, activeTab: $activeTab)
.tabItem {
Label(Tabs.profile.rawValue, systemImage: Tabs.profile.icon)
.environment(\.symbolVariants, .none)
}
.tag(3)
}
.environmentObject(model)
}
.tint(.accentColor)
.onChange(of: activeTab, perform: { value in
log.info("\n 🟢: (MainView: 46) - User has selected tab: \(value).")
print("")
})
}
.onAppear() {
model.fetchPlaces()
}
}
}

然后我有这样的预览:

struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView(model: model, activeTab: activeTab)
}
}

我在预览中遇到了两个错误:

Cannot find 'activeTab' in scope
Cannot find 'model' in scope

如果我这样定义它:

struct MainView_Previews: PreviewProvider {
@ObservedObject var model: MainViewModel
@State var activeTab = 0
static var previews: some View {
MainView(model: model, activeTab: activeTab)
}
}

我收到以下错误:

Instance member 'activeTab' cannot be used on type 'MainView_Previews'
Instance member 'model' cannot be used on type 'MainView_Previews'

有谁知道如何配置预览才能使其正常工作且不会崩溃?

最佳答案

发生这种情况是因为您在预览中传递了不存在的参数,或者因为您无法在预览中初始化对象。相反,这样做:

struct MyExamplePreviews: PreviewProvider{
static var previews: some View {
MainView(model: MainViewModel(), activeTab: 0)
}
}

这将允许您预览 UI。这是做什么的:

  • 创建一个在顶层传入的新模型 - 同样,您不能在任何地方创建它,只能在预览中创建
  • 使 activeTab 设置为 0 - 如果需要,您可以拥有多个具有不同选项卡的预览设备。查看docs for Previews了解更多。

关于swift - 为 ObservedObject 和 State 对象配置预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74497009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com