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')的主要内容,如果未能解决你的问题,请参考以下文章

如何根据布尔值 (SwiftUI) 更改对象的绑定源?

删除具有绑定布尔值的列表项 - SwiftUI

使用 if 语句处理布尔值

FluentAssertion - 向 if 语句添加断言

为啥这个 if 语句以非布尔值成功?

Lua,if语句成语无法返回正确的布尔值