当我尝试将 Toggle 的输出分配给旧变量时,它说: Binding<Bool> is not convertible to <Bool>

Posted

技术标签:

【中文标题】当我尝试将 Toggle 的输出分配给旧变量时,它说: Binding<Bool> is not convertible to <Bool>【英文标题】:When I try and assign the output of the Toggle to an old variable it says: Binding<Bool> is not convertible to <Bool> 【发布时间】:2020-05-10 14:59:08 【问题描述】:

当我尝试将 Toggle 的输出分配给旧变量时,它显示:Binding is not convertible to bool.有没有办法解决这个问题。我在 Swift Playgrounds 中对此进行编码。下面的代码是不起作用的部分

import SwiftUI
import PlaygroundSupport

struct ContentView : View 

    @State private var redButton = false
    @State private var step = 0
    @State private var washingHandsToggle = true
    @State private var wearingMaskToggle = true
    @State private var coverMouthToggle = true
    @State private var quarantineToggle = true
    @State private var text = ""
    @State private var slide = 20.0
    @State private var slidetwo = 500000.0
    @State private var r0 = 0
    @State private var rvalues = [6.5, 6.1, 5.3, 4.8, 4.2, 3.5, 3.1, 2.9, 1.75, 1.5, 1.2, 1.0, 0.92, 0.82, 0.75, 0.7]

    var body: some View 
        VStack 
            VStack 
                Toggle(isOn: $washingHandsToggle) 
                    Text("Washing Hands Regularly")
                .padding(.horizontal, 50)
                    .padding(.vertical, 25)

                Toggle(isOn: $wearingMaskToggle) 
                    Text("Wearing a Protective Mask")
                .padding(.horizontal, 50)
                    .padding(.vertical, 25)

                Toggle(isOn: $coverMouthToggle) 
                    Text("Cover Mouth When Sneezing")
                .padding(.horizontal, 50)
                    .padding(.vertical, 25)


                Toggle(isOn: $quarantineToggle) 
                    Text("Quarantine")
                .padding(.horizontal, 50)
                    .padding(.vertical, 25)
                    .padding(.bottom, 30)
                r0 = rvalues[(wearingMaskToggle ? 1:0) + (washingHandsToggle ? 2:0) + (quarantineToggle ? 8:0) + (coverMouthToggle ? 4:0)]

                if !washingHandsToggle && !wearingMaskToggle && !quarantineToggle 
                    Text("Select At least 1")
                else 
                    Text("Your R") + Text("0")
                        .font(.system(size: 15.0))
                        .baselineOffset(-6.0) + Text("Value Is")


                    Text("\(r0)")

                

【问题讨论】:

【参考方案1】:

您不能只将r0 设置在VStack 的中间。一般来说,如果你开始在函数构建器中编写诸如赋值、循环、方法调用等普通语句,就像VStack.init 的闭包参数一样,它会变得非常混乱。

您最好将r0 设为计算属性:

var r0 : Double 
    rvalues[(wearingMaskToggle ? 1:0) + (washingHandsToggle ? 2:0) + (quarantineToggle ? 8:0) + (coverMouthToggle ? 4:0)]

并删除你设置r0的行。

else 分支中的四个Text 之一缺少+。你应该写:

Text("Your R") +
Text("0 ")
    .font(.system(size: 15.0))
    .baselineOffset(-6.0) +
Text("Value Is ") +
Text("\(r0)")

另外,我注意到您没有在 if 语句中包含 coverMouthToggle。那可能是笔误...

【讨论】:

@EliasFiz 你的意思是var r0: Double 部分?不要声明@State private var r0 = 0,而是写那个。 好的,谢谢我这样做了,它成功了!我添加了一个按钮,该按钮选择一种随机方式来打开/关闭切换,但我收到一个错误“无法分配给属性:'r0' 是一个只能获取的属性”。你知道我该如何解决这个问题吗? @EliasFiz 不设置 r0。设置个人xxxToggles

以上是关于当我尝试将 Toggle 的输出分配给旧变量时,它说: Binding<Bool> is not convertible to <Bool>的主要内容,如果未能解决你的问题,请参考以下文章

将输出分配给Bash中的变量[重复]

静态成员变量初始化 C++

尝试使用 SDL 为音频分配回调变量

如何在使用“ls”命令以及将输出分配给变量时抑制标准错误?

尝试将字符串分配给结构内的字符串变量时出错

BISON FLEX。提供输入文件时出现意外输出