Swift指南中枚举示例为何对单一值使用switch?
为什么要对确定值的枚举变量使用switch?
你提到的这段Swift官方示例代码确实容易让人疑惑:明明success已经被明确赋值为ServerResponse.result("6:00 am", "8:09 pm"),却还要用switch语句去匹配它。其实原因很简单:
这只是语法演示的需要
官方《Guided Tour》的核心目的是教你如何用switch处理枚举的不同case分支,所以用一个确定值的变量来展示语法的正确性——不管变量是枚举的哪一种case,switch都能准确匹配对应的处理逻辑,同时也展示了Swift枚举关联值的提取方式(比如把result里的两个字符串提取为sunrise和sunset)。实际开发中变量值是不确定的
真实场景里,你拿到的ServerResponse类型变量几乎不会是提前确定好的。比如它可能是网络请求的返回结果:可能成功返回日出日落时间,也可能失败返回错误信息。这时候switch就成了必须的逻辑,用来分别处理两种不同的情况。举个更贴近实际的例子:enum ServerResponse { case result(String, String) case failure(String) } // 模拟服务器请求,随机返回成功或失败 func fetchSunriseSunset() -> ServerResponse { return Bool.random() ? .result("6:00 am", "8:09 pm") : .failure("Out of cheese.") } let response = fetchSunriseSunset() switch response { case let .result(sunrise, sunset): print("Sunrise is at \(sunrise) and sunset is at \(sunset).") case let .failure(message): print("Failure... \(message)") }这里
response的值是不确定的,switch就能帮我们覆盖所有可能的情况。Swift的switch要求穷尽枚举所有case
Swift的switch是强类型检查的,必须覆盖枚举的所有case分支,否则编译器会报错。官方示例写全两个case,也是为了展示符合Swift语法规范的枚举处理方式——不能只写一个result的case就完事。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

