编译后没有出现警告,为什么警告我?

时间:2016-05-26 14:56:11

标签: swift properties enumeration

我创建一个包含一年中所有月份的枚举。枚举的计算值根据输入月份返回大学学期

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月分配到月份来执行案例) enter image description here

问题2 :计算属性是懒惰属性吗?

非常感谢你的时间和帮助

3 个答案:

答案 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,它就会起作用!