SwiftUI 绑定布尔 if 语句(无法将类型 'Binding<Bool>' 的值转换为预期的条件类型 'Bool')
Posted
技术标签:
【中文标题】SwiftUI 绑定布尔 if 语句(无法将类型 \'Binding<Bool>\' 的值转换为预期的条件类型 \'Bool\')【英文标题】:SwiftUI binding boolean if statement (Cannot convert value of type 'Binding<Bool>' to expected condition type 'Bool')SwiftUI 绑定布尔 if 语句(无法将类型 'Binding<Bool>' 的值转换为预期的条件类型 'Bool') 【发布时间】:2020-06-01 01:47:35 【问题描述】:我正在尝试有条件地显示视图(不使用 .sheet)并使用绑定布尔值在标题中返回上述错误。如果我使用self.menuactivated
,@State 变量切换时不会显示任何视图。有没有办法解决这个问题?
struct ContentView: View
@State private var menuActivated = false
var body: some View
NavigationView
... // code
if $menuActivated
menuView()
【问题讨论】:
这里不需要$
.. 只需使用if menuActivated
if menuActivated
是正确的。如果您没有看到菜单,则说明您的布局有问题。将menuActivated
默认设置为true
并确保可见
@NewDev - 删除 $ 不会改变任何事情
@Paulw11 - 尝试使用它并使用 .position(x: 0, y:0) 检查视图是否会显示并且无处可见。
如果你删除了if
,只保留menuView
,它会以你想要的方式显示视图吗?
【参考方案1】:
我认为这是意图(菜单将显示在 NavigationView 上切换)
struct ContentView: View
@State private var menuActivated = false
var body: some View
ZStack
NavigationView
... // code
if menuActivated
menuView()
【讨论】:
【参考方案2】:找到了解决办法。将NavigationView
嵌入到VStack
中,并在其末尾添加menuView
。
struct ContentView: View
@State private var menuActivated = false
var body: some View
ZStack
NavigationView
... // view code
if menuActivated
menuView()
【讨论】:
【参考方案3】:如果您正在寻找基于条件的视图
func getView() -> AnyView
return AnyView(
//any business logic and view
)
并像使用它一样
self.getView()
【讨论】:
以上是关于SwiftUI 绑定布尔 if 语句(无法将类型 'Binding<Bool>' 的值转换为预期的条件类型 'Bool')的主要内容,如果未能解决你的问题,请参考以下文章