我正在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
}
我将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
在我看来,您可以将其转换为简单的数学运算,因为您仅对值为true时的切换感兴趣”
let value = (coverMouthToggle ? 1.0: 0) + (washingHandsToggle ? 2.0 : 0) + (wearingMaskToggle ? 4.0 : 0) + (quarantineToggle ? 8.0: 0)
((请注意,由于不确定我正确的答案,您可能需要调整每个分数)