Swift中用于打印星期的switch case代码异常,求问题排查
你的Switch-Case星期打印代码问题排查与修复
嘿,我来帮你看看这段Swift代码的问题哈!你的代码里有几个关键问题导致功能没正常工作,我逐个给你拆解:
问题1:Switch的判断对象写错了
你在switch语句里写的是switch dayOfTheWeek,但dayOfTheWeek是你定义的函数名,不是要判断的参数!正确的应该是用传入的day参数来做判断,也就是switch day。
问题2:区间逻辑有漏洞
你用的..<2这类半开区间会导致匹配范围混乱:比如第一个case..<2会匹配0和1,而第二个case..<3其实能匹配0、1、2,但因为switch是从上到下匹配,一旦第一个case命中就不会往下走了,所以只有0、1会输出Monday,2输出Tuesday...但这显然和你想实现的“数字对应星期”逻辑不符,而且0这个数字也不该对应星期对吧?
问题3:函数依赖外部变量,不够健壮
你的函数里直接打印了外部的aNumber,但函数本身已经接收了day参数,应该基于传入的day来处理,而不是依赖外部变量,这样函数的复用性会很差,比如你想传入其他数字测试都不方便。
问题4:随机数范围不合理
你生成的是0...10的随机数,但星期对应的数字应该是1-7(或者0-6),超出这个范围的数字都会走到default的Error分支,没必要生成这么大的范围。
修复后的代码示例
这里我给你两种常见的实现方式,你可以根据需求选:
方式1:数字1-7对应周一到周日
// 生成1-7的随机数,对应周一到周日 var aNumber = Int.random(in: 1...7) func dayOfTheWeek(day: Int) { switch day { case 1: print("Monday") case 2: print("Tuesday") case 3: print("Wednesday") case 4: print("Thursday") case 5: print("Friday") case 6: print("Saturday") case 7: print("Sunday") default: print("Error: 输入的数字不在1-7范围内") } // 打印传入的数字,用参数day而不是外部变量 print("传入的数字是: \(day)") } dayOfTheWeek(day: aNumber)
方式2:数字0-6对应周一到周日
如果习惯用0作为起始索引,可以用这个版本:
// 生成0-6的随机数,对应周一到周日 var aNumber = Int.random(in: 0...6) func dayOfTheWeek(day: Int) { switch day { case 0: print("Monday") case 1: print("Tuesday") case 2: print("Wednesday") case 3: print("Thursday") case 4: print("Friday") case 5: print("Saturday") case 6: print("Sunday") default: print("Error: 输入的数字不在0-6范围内") } print("传入的数字是: \(day)") } dayOfTheWeek(day: aNumber)
这样修改后,你的代码就能正常根据输入的数字打印对应的星期啦!
内容的提问来源于stack exchange,提问作者muratonurkaya
相关产品推荐
相关产品推荐

