swift - 是否可以将枚举值与“if”语句进行比较?
问题描述
我创建了一个枚举类型(Swift 4.0):
enum TraceResult{
case nothing
case success
case failed
case custom(String) //#1
}
之后我决定比较两个枚举值:
let tr = TraceResult.nothing
if tr == TraceResult.success{ //#2
//do something...
}
编译器会在第 2 行报错:
二元运算符“==”不能应用于两个“TraceResult”操作数
如果我删除第 1 行,没关系!!!
或者我用'switch'语句来比较它们,也可以!!!
那么是否可以将两个 TraceResult 值与“if”语句进行比较???
谢谢 ;)
解决方案
您需要Equatable
为您的类型声明符合性:
enum TraceResult: Equatable {
case nothing
case success
case failed
case custom(String)
}
从 Swift 4.1 开始,编译器会自动==
为你合成函数的定义。在 4.1 之前,您需要手动实现,如下所示:
extension TraceResult: Equatable {
static func == (lhs: TraceResult, rhs: TraceResult) -> Bool {
switch (lhs, rhs) {
case (.nothing, .nothing): return true
case (.success, .success): return true
case (.failed, .failed): return true
case (.custom(let s1), .custom(let s2)) where s1 == s2: return true
case _: return false
}
}
}
推荐阅读
- reactjs - Cognito忘记密码api对发送(成功)或失败的验证码没有任何响应
- python - 将蛇画到我的 pygame 游戏中似乎不起作用
- ansible - Ansible:使用 json_query 选择嵌套值
- windows - 无法连接到 AD 服务器?
- json - databricks-cli:在 bash 脚本中运行作业时出现 JSONDecodeError
- azure-cosmosdb - 使用更改源将数据从旧容器迁移到新的分区容器
- sql - 教师、科目相同且课间无时间间隔时分组查询
- python - 按小时将日期时间对象排序到 Pandas 数据框,然后使用 Matplotlib 可视化为直方图
- python - 要在 Flask 后端运行的 MATLAB 脚本:matlab 到 .py 转换器?
- sql - 将多行数据聚合为一行,然后嵌套数据