我有枚举:
enum RetailDemandReturnOperation {
case salesReturn(value: MSRetailSalesReturnRealm)
case demand(value: MSRetailDemandRealm)
}
MSRetailDemandRealm
和MSRetailDemandRealm
都实现相同的协议(protocol),它们具有变量title和stats。我想提取此值,但我不在乎实际存储在哪个对象中。请考虑以下事项: switch data! {
case .salesReturn(let object):
titleString = object.title
statistics = object.stats
case .demand(let object):
titleString = object.title
statistics = object.stats
break
}
我必须输入每个枚举值才能获取协议(protocol)的属性。有什么办法可以使它更短更清洁吗?获取相关值,无论它是什么,只要它符合我的协议(protocol),并获取协议(protocol)值?
谢谢。
最佳答案
您可以在枚举中添加一个返回协议(protocol)的属性。例如:
enum RetailDemandReturnOperation {
case salesReturn(value: MSRetailSalesReturnRealm)
case demand(value: MSRetailDemandRealm)
var realm: MSRetailRealm {
switch self {
case .salesReturn(let realm):
return realm
case .demand(let realm):
return realm
}
}
}
然后,当您想使用枚举的特定值访问这些属性时,只需使用:
let operation = RetailDemandReturnOperation.salesReturn(value: MSRetailSalesReturnRealm())
let title = operation.realm.title