代码之家  ›  专栏  ›  技术社区  ›  BabaD

在作用域中找不到“项”。SwiftUI

  •  0
  • BabaD  · 技术社区  · 2 年前

    对于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
        
    }
    

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

    我尝试过的事情:

    检查和复查打字错误, 正在清理生成文件夹并重新启动Xcode, 重新启动Mac, 从项目文件中删除衍生数据

    1 回复  |  直到 2 年前
        1
  •  0
  •   lorem ipsum    2 年前

    使用 @State 初始化 @Observable

    @State var interactionVM = InteractionViewModel()
    

    和使用 @Bindable 修改它。

    @Bindable var interactionVM: InteractionViewModel
    

    这个 $ 是访问的一种方式 Binding 它与真理的源泉起着双向联系的作用,它来自 DynamicProperty 由使用 @propertyWrapper .

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