Swift:如何避免嵌套switch,直接转型枚举关联值?
代码优化方案
你可以利用Swift的模式匹配特性,直接在单个switch语句中匹配多层枚举的关联值,同时通过where从句过滤条件,避免嵌套switch:
switch error { case Project.Client.LoadError.operationFailed(Project.Client.APIClientError.invalidStatusCode(let message, _)) where message == "error": delegate?.error(invalidScript) default: refresh() }
说明
- 直接在case中嵌套枚举的关联值匹配,省去内层switch
where从句替代原有的guard逻辑,仅当message等于"error"时执行对应分支- 原代码中
message != nil可以省略,因为message == "error"仅在message非nil时才会成立(可选类型的比较逻辑)
学习术语推荐
如果想深入理解这类逻辑,可以搜索以下术语:
- Swift 枚举关联值(Associated Values in Swift Enums)
- Swift 模式匹配(Pattern Matching in Swift)
- Switch语句的where从句(Where Clauses in Switch Statements)
- Swift类型转换与模式匹配结合(Type Casting with Pattern Matching)
内容的提问来源于stack exchange,提问作者Phillip
相关产品推荐
相关产品推荐

