在范围内找不到“项目”。 SwiftUI

问题描述 投票:0回答:1

对 SwiftUI 来说相当新,所以这可能只是我缺少的一些简单的东西。

出现此错误:“在范围内找不到‘$interactionVM’”,我试图在其中展示工作表。 仅当我使用 .sheet 时才会发生这种情况,如果我用 Text(String(...)) 替换该工作表,我可以毫无错误地访问interactionVM 的值。

import SwiftUI

struct HomeView: View {
    var interactionVM: InteractionViewModel
    
    var body: some View {
        NavigationStack {
            VStack {
                VStack {
                    HomeViewCard()
                }
                .sheet(isPresented: $interactionVM.presentInteractionMenu) {
                    InteractionMenuView(interactionVM: interactionVM)
                        .presentationDetents([.fraction(0.2), .fraction(0.3), .fraction(0.4), .fraction(0.5), .fraction(0.6), .fraction(0.7), .fraction(0.8), .fraction(0.9)])
                        .interactiveDismissDisabled()
                        .presentationBackgroundInteraction(.enabled)
                }
                .toolbar {
                    ToolbarItem {
                        Menu {
                            NavigationLink {
                                EmptyView()
                            } label: {
                                Text("Option 1")
                            }
                        } label: {
                            Image(systemName: "ellipsis")
                        }
                    }
                }
            }
        }
    }
}

#Preview {
    HomeView(interactionVM: InteractionViewModel())
}

interactionVM 在根文件中初始化,然后传递给 HomeView:

import SwiftUI

@main
struct theBlackBookApp: App {
    
    let interactionVM = InteractionViewModel()
    
    var body: some Scene {
        WindowGroup {
            HomeView(interactionVM: interactionVM)
        }
    }
}

这也是我的interactionVM 文件,以防相关。

import Foundation

@Observable
class InteractionViewModel {
    var interactions: [Interaction] = [Interaction(interactionName: "Example", id: UUID())]
    
    var presentInteractionMenu: Bool = true
    var presentInteractionDetails: Bool = false
    
}

非常感谢任何帮助或替代解决方案!我只需要能够从其他视图修改 Bool 值。

我尝试过的事情:

检查并重新检查拼写错误, 清理构建文件夹并重新启动 Xcode, 重新启动 Mac, 从项目文件中删除 DerivedData

xcode swiftui scope
1个回答
0
投票

使用

@State
初始化
@Observable

@State var interactionVM = InteractionViewModel()

并使用

@Bindable
进行修改。

@Bindable var interactionVM: InteractionViewModel

$
是一种访问
Binding
的方式,它充当与真理来源的双向连接,它来自
DynamicProperty
所使用的
@propertyWrapper

我建议你看一下基本的 Apple SwiftUI 教程。

© www.soinside.com 2019 - 2024. All rights reserved.