我创建一个包含一年中所有月份的枚举。枚举的计算值根据输入月份返回大学学期
enum Month{
case January, February, March, April, May, June, July, August, September, October, November, December
var schoolSemester: String {
switch self {
case .April, .September, .October, .November, .December:
return "Autumn"
case .January, .February, .March, .April, .May:
return "Sping" // Here comes the warning
default:
return "Not in the school year"
}
}
}
var whichSemester = Month.February
print(whichSemester.schoolSemester)//even though the warning says this will never be executed, but it was executed!
问题1 :为什么Xcode一直告诉我第二种情况永远不会被执行(这是错误的!我确实通过将2月分配到月份来执行案例)
问题2 :计算属性是懒惰属性吗?
非常感谢你的时间和帮助
答案 0 :(得分:3)
问题是因为你在第一个案件和第二个案件上都有.April。这就是第二种情况永远不会被执行的原因。
答案 1 :(得分:1)
编译器会发出警告,因为您显然输入错误
在第一种情况下,.August
为.April
,因此.April
出现在.August
中
两种情况。
由于您使用过,编译器无法注意到您省略了var schoolSemester: String {
switch self {
case .April, .September, .October, .November, .December:
return "Autumn"
case .January, .February, .March, .April, .May:
return "Spring"
case .June, .July:
return "Not in the school year"
}
默认情况。因此,最好列出所有可能的枚举
值显式改为:
.August
现在编译器发出警告和错误
warning: case will never be executed case .January, .February, .March, .April, .May: error: switch must be exhaustive, consider adding a default clause
并且代码无法编译。它强制您检查所有情况
再次,你会很快注意到from: amq:queue:INPUT.REQUESTS?.. concurrentConsumers.. and transacted enabled
throttle
to: http://url
缺失。
答案 2 :(得分:0)
.April列出了两种不同的情况,因此该语句永远不会执行包含April的第二种情况。只需从其中一个案例中移除April,它就会起作用!