编译后没有出现警告,为什么会警告我?
A warning didn't appears after compiled, why it warns me?
我创建了一个包含一年中所有月份的枚举。枚举的计算值returns大学学期基于输入的月份
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:计算属性一个Lazy属性?
非常感谢您的宝贵时间和帮助
问题是因为您在第一种情况和第二种情况下都有 .April。这就是第二种情况永远不会被执行的原因。
.April 列出了两种不同的情况,因此语句永远不会执行包含 April 的第二种情况。只需将 April 从其中一个案例中删除即可!
编译器发出警告,因为您显然输入错误
.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"
}
现在编译器同时发出警告和 错误
warning: case will never be executed
case .January, .February, .March, .April, .May:
error: switch must be exhaustive, consider adding a default clause
并且代码 无法编译。 它会强制您检查所有情况
再次,您很快就会注意到 .August
不见了。
我创建了一个包含一年中所有月份的枚举。枚举的计算值returns大学学期基于输入的月份
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:计算属性一个Lazy属性?
非常感谢您的宝贵时间和帮助
问题是因为您在第一种情况和第二种情况下都有 .April。这就是第二种情况永远不会被执行的原因。
.April 列出了两种不同的情况,因此语句永远不会执行包含 April 的第二种情况。只需将 April 从其中一个案例中删除即可!
编译器发出警告,因为您显然输入错误
.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"
}
现在编译器同时发出警告和 错误
warning: case will never be executed case .January, .February, .March, .April, .May: error: switch must be exhaustive, consider adding a default clause
并且代码 无法编译。 它会强制您检查所有情况
再次,您很快就会注意到 .August
不见了。