Swift中不使用switch 借助if else if语句判断变量匹配区间的实现问题
Swift else if 区间匹配修正方案
原代码错误点
- 你写的
Fahrenheit == 0 - 20属于逻辑错误:代码会优先计算0-20得到数值-20,实际效果是判断温度是否等于-20,完全没有实现区间匹配的效果 - 原有区间边界存在重叠(比如
41-60和60-80都包含60,会导致匹配逻辑冲突)
修正后代码
使用Swift闭区间运算符...的contains()方法即可判断变量是否落在指定区间内,完全符合你不用switch、只用if分支的要求:
var Fahrenheit = 10 if Fahrenheit < 0 { print("Too Cold for Outdoors") } else if (0...20).contains(Fahrenheit) { print("Very Cold Weather") } else if (21...40).contains(Fahrenheit) { print("Cold") } else if (41...60).contains(Fahrenheit) { print("Normal") } else if (61...80).contains(Fahrenheit) { print("Nice") } else if (81...90).contains(Fahrenheit) { print("Warm") } else if Fahrenheit > 90 { print("Hot") }
如果需要左闭右开的区间,可以用半开区间运算符..<,比如0..<21和0...20的匹配效果完全一致。
内容的提问来源于stack exchange,提问作者Gourdrik
相关产品推荐
相关产品推荐

