Swift中如何更简洁地检查枚举类型?寻求替代Switch语句的简化实现方案
更简洁的枚举Case判断方法(无需Switch)
当然有更清爽的写法!你现在的代码是为了判断某个实例是否属于DataToValidate枚举的.object case,完全可以不用Switch语句来简化。
先回顾下你的代码和枚举定义:
原实现代码
if let i = instance as? DataToValidate { switch i { case .object: return true default: return false } } else { return false }
枚举定义
public enum DataToValidate { case object(JSONObject) case array(JSONArray) case string(String) }
方法一:一行式模式匹配(最简洁)
利用Swift的模式匹配特性,直接用if case的可选绑定写法,一行就能搞定:
return if case .object(_)? = instance { true } else { false }
或者更直观的拆分版本:
if case .object(_)? = instance { return true } return false
这里的?是因为instance as? DataToValidate是可选类型,case .object(_)?相当于同时完成了类型转换和case匹配,省去了额外的if let绑定步骤。
方法二:给枚举添加计算属性(更优雅,适合复用)
如果这个判断逻辑会在多个地方用到,最好把它封装到枚举内部,代码可读性和复用性都会更好:
public enum DataToValidate { case object(JSONObject) case array(JSONArray) case string(String) // 添加计算属性封装判断逻辑 public var isObject: Bool { if case .object = self { return true } return false } }
之后判断的时候就可以这样写:
return (instance as? DataToValidate)?.isObject ?? false
这种方式把判断逻辑内聚到枚举本身,代码更整洁,后续如果要修改判断规则,只需要调整枚举内部的属性即可,不用在各个调用处逐一修改。
这两种方法都避免了Switch语句,比你原来的写法简洁很多,根据你的使用场景选就行~
内容的提问来源于stack exchange,提问作者János
相关产品推荐
相关产品推荐

