swift - Swift Enum:表达式模式匹配问题
问题描述
我一直在尝试将自定义关联值与枚举中的字符串混合,但无法这样做。当我尝试在枚举上应用 switch case 时,出现此错误:'Fruit' 类型的表达式模式无法匹配'Fruit' 类型的值
是因为字符串是值类型,因此 Swift 能够比较它们,但不能比较作为引用类型的 Fruit 的自定义类对象?
class Fruit{
let name: String?
let energyKcl: Double?
let costPerKg: Double?
init(name:String, energyKcl: Double, costPerKg: Double) {
self.name = name
self.energyKcl = energyKcl
self.costPerKg = costPerKg
}
}
enum Calorie {
case fruit(Fruit)
case chocolate (String)
case dairy(String)
case Nuts(String)
}
let banana = Fruit.init(name: "Banana", energyKcl: 100, costPerKg: 10)
func prepareBreakfast(calories: Calorie){
switch calories {
case .chocolate("Dark"):
print("Dark")
case .chocolate("White"):
print("White")
case .fruit(banana): //Error: Expression pattern of type 'Fruit' cannot match values of type 'Fruit'
print("banana")
default:
print ("Not available")
}
}
prepareBreakfast(calories: .fruit(banana))
解决方案
没有问题,如果没有Equatable协议,自定义类是不可比的
extension Fruit: Equatable {
static func == (lhs: Fruit, rhs: Fruit) -> Bool {
return lhs.name == rhs.name
&& lhs.energyKcl == rhs.energyKcl
&& lhs.costPerKg == rhs.costPerKg
}
}
推荐阅读
- anylogic - 如何在anylogic中模拟期间动态更改资源池的班次组大小?
- python-3.x - 如何在用户访问 API 时使令牌处于活动状态
- c# - 迁移到 .Net Core 3.1 时,.Net Core 2.2 中使用的 Services.AddMvc() 和 SuperJsonOutputFormatter 的替代方法是什么
- regex - 在句子内查找大写 O,但不在开头
- python - 在 pandas 数据框中将浮点值转换为 timedelta 值
- python - Python 抓取 | 美汤
- apache-nifi - 处理器可以在 NIFI-1.10.0 中设置指定状态吗?
- microsoft-graph-api - 通过 microsoft graph explorer 的 C# 示例说未定义的方法
- python - 仅检测人员类
- sql - sql server 聚合函数(sum)