对 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
使用
@State
初始化 @Observable
@State var interactionVM = InteractionViewModel()
并使用
@Bindable
进行修改。
@Bindable var interactionVM: InteractionViewModel
$
是一种访问Binding
的方式,它充当与真理来源的双向连接,它来自DynamicProperty
所使用的@propertyWrapper
。
我建议你看一下基本的 Apple SwiftUI 教程。