Swift 无法分配类型为';MenuView';输入';一些观点';

Swift 无法分配类型为';MenuView';输入';一些观点';,swift,swiftui,Swift,Swiftui,我注意到在SwiftUI中只能有一个.popover修饰符。我必须展示两个可能的简单弹出窗口,一个是MenuView,另一个是CreateChannelView 为此,我有: @State private var popover: some View @State private var showPopover = false 然后是修饰符: .popover(isPresented: self.$showPopover) { self.popover } 问题是,当我得到错误时,我

我注意到在SwiftUI中只能有一个
.popover
修饰符。我必须展示两个可能的简单弹出窗口,一个是
MenuView
,另一个是
CreateChannelView

为此,我有:

@State private var popover: some View
@State private var showPopover = false
然后是修饰符:

.popover(isPresented: self.$showPopover) {
    self.popover
}
问题是,当我得到错误时,我不知道如何将
MenuView
CreateChannelView
的实例分配给
popover

无法将“MenuView”类型的值分配给“some View”类型


这与在
init
方法中传递泛型视图有点不同。

您可以将这两个视图声明为两个不同的变量,然后使用布尔值在它们之间切换选择,以确定显示哪个。我用您提供的信息制作了一个示例程序:

struct ContentView:View{
让按钮化:CGFloat=30
@状态变量isPresented=false
@状态变量usePopover1=true
var popover1:一些视图{
文本(“Popover 1”)
}
var popover2:一些视图{
图像(系统名称:“星”)
}
var body:一些观点{
VStack{
按钮(操作:{
self.isPresented=true
}) {
文本(“当前流行音乐”)
}
按钮(操作:{
self.usePopover1.toggle()
}) {
文本(“从\(self.usePopover1?“popover1”:“popover2”)切换到\(self.usePopover1?“popover2”:“popover1”))
}
}.popover(isPresented:$isPresented){
如果self.usePopover1{
AnyView(self.popover1)
}否则{
AnyView(self.popover2)
}
}
}
}

我只是为了演示而当场制作了两个弹出窗口,但是您可以声明您的弹出窗口是您在问题中提到的两种不同类型(
let popover1:MenuView=MenuView(…)
let poover2:CreateChannelView=CreateChannelView(…)
)。

解决方案是使用
AnyView

@State private var popover: AnyView
然后可以将其指定为:

self.popover = AnyView(CreateChannelView(showing: self.$showPopover))

某些视图-表示一个符合视图co的具体类型,它不能一次是MenuView,另一次是CreateChannelView。