将16条语句压缩成更简单的代码Swift Playground

问题描述 投票:0回答:2

我正在Swift操场上工作,并且使用多个切换来确定某个动作是对还是错。从那里,它们的特定组合将显示分配给每个组合的数字。因为我有4个切换,所以我决定做出16个else语句,但这确实减慢了我的速度。有没有办法使用更少的语句?

Toggle(isOn: $washingHandsToggle) {
                    Text("Washing Hands Regularly")
                }.padding(40)

                Toggle(isOn: $wearingMaskToggle) {
                    Text("Wearing a Protective Mask")
                }.padding(40)

                Toggle(isOn: $coverMouthToggle) {
                    Text("Cover your mouth and nose when coughing or sneezing")
                }.padding(40)

                Toggle(isOn: $quarantineToggle) {
                    Text("Quarantine")
                }.padding(40)


                if !washingHandsToggle && !wearingMaskToggle && !coverMouthToggle && !quarantineToggle {
                    self.r0 = 1.0
                }else if !washingHandsToggle && !wearingMaskToggle && coverMouthToggle && !quarantineToggle {
                    self.r0 = 2.0

                }else if washingHandsToggle && !wearingMaskToggle && !coverMouthToggle && !quarantineToggle {
                    self.r0 = 3.0

                }else if !washingHandsToggle && wearingMaskToggle && !coverMouthToggle && !quarantineToggle {
                    self.r0 = 4.0

                }else if washingHandsToggle && !wearingMaskToggle && coverMouthToggle && !quarantineToggle {
                    self.r0 = 5.0

                }else if !washingHandsToggle && wearingMaskToggle && coverMouthToggle && !quarantineToggle {
                    self.r0 = 6.0

                }else if washingHandsToggle && wearingMaskToggle && !coverMouthToggle && !quarantineToggle {
                    self.r0 = 7.0

                }else if washingHandsToggle && wearingMaskToggle && coverMouthToggle && !quarantineToggle {
                    self.r0 = 8.0

                }else if !washingHandsToggle && !wearingMaskToggle && !coverMouthToggle && quarantineToggle {
                    self.r0 = 9.0

                }else if !washingHandsToggle && !wearingMaskToggle && coverMouthToggle && quarantineToggle {
                    self.r0 = 10.0

                }else if washingHandsToggle && !wearingMaskToggle && !coverMouthToggle && quarantineToggle {
                    self.r0 = 11.0

                }else if !washingHandsToggle && wearingMaskToggle && !coverMouthToggle && quarantineToggle {
                    self.r0 = 12.0

                }else if washingHandsToggle && !wearingMaskToggle && coverMouthToggle && quarantineToggle {
                    self.r0 = 13.0

                }else if !washingHandsToggle && wearingMaskToggle && coverMouthToggle && quarantineToggle {
                    self.r0 = 14.0

                }else if washingHandsToggle && wearingMaskToggle && !coverMouthToggle && quarantineToggle {
                    self.r0 = 15.0

                }else {
                    self.r0 = 16.0
                }

ios swift swiftui swift-playground
2个回答
2
投票

我将4个开关的状态转换为1/0,然后将这些位映射为4位数字,值从0-15开始

let washingHands:Int = washingHandsToggle.isOn ? 1:0
let wearingMask:Int = wearingMaskToggle.isOn ? 1:0
let coverMouth:Int = coverMouthToggle.isOn ? 1:0
let quarantine:Int = quarantineToggle.isOn ? 1:0

let stateValue = washingHands <<3 
                 | wearingMask << 2 
                 | coverMouth << 1 
                 | quarantine

2
投票

在我看来,您可以将其转换为简单的数学运算,因为您仅对值为true时的切换感兴趣”

let value = (coverMouthToggle ? 1.0: 0) +
    (washingHandsToggle ? 2.0 : 0) +
    (wearingMaskToggle ? 4.0 : 0) +
    (quarantineToggle ? 8.0: 0)

((请注意,由于不确定我正确的答案,您可能需要调整每个分数)

© www.soinside.com 2019 - 2024. All rights reserved.