所以我仍在學習 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)
}
}
我在預覽中收到兩個錯誤:
在范圍內找不到“activeTab” 在范圍內
找不到“模型”
如果我這樣定義它:
struct MainView_Previews: PreviewProvider {
@ObservedObject var model: MainViewModel
@State var activeTab = 0
static var previews: some View {
MainView(model: model, activeTab: activeTab)
}
}
我收到以下錯誤:
實體成員“activeTab”不能用于型別“MainView_Previews”
實體成員“model”不能用于型別“MainView_Previews”
有誰知道我如何配置預覽以使其正常作業并且不會崩潰?
uj5u.com熱心網友回復:
發生這種情況是因為您在預覽中傳遞了不存在的引數,或者因為您無法在預覽中初始化物件。相反,這樣做:
struct MyExamplePreviews: PreviewProvider{
static var previews: some View {
MainView(model: MainViewModel(), activeTab: 0)
}
}
這將允許您預覽 UI。這是做什么的:
- 創建一個在頂層傳入的新模型 - 同樣,您不能在任何地方創建它,只能在預覽中創建
- 使 activeTab 設定為 0 - 如果需要,您可以擁有多個具有不同選項卡的預覽設備。請參閱檔案
Previews以了解更多資訊。
uj5u.com熱心網友回復:
我推薦下面的方法,然后你可以@EnvironmentObject var model: Model在任何需要它的視圖中使用,而不必將它傳遞到每個視圖中。
class Model: ObservableObject {
@Published var items: [Item] = []
static var shared = Model()
static var preview = Model(preview: true)
init(preview: Bool) {
if preview {
items = // set some test items
return
}
load()
}
fun load(){
// load items from disk
}
}
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(Model.shared)
}
}
}
struct ContentView: View {
@EnvironmentObject var: model: Model
var body: some View {
NavigationStack {
List {
ForEach($model.items) $item in {
TextField("Title" text: $item.title)
}
.navigationTitle("Items")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environmentObject(Model.preview)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/536719.html
標籤:迅速迅捷
