我有枚举:
enum RetailDemandReturnOperation {
case salesReturn(value: MSRetailSalesReturnRealm)
case demand(value: MSRetailDemandRealm)
}
Run Code Online (Sandbox Code Playgroud)
MSRetailDemandRealm并且MSRetailDemandRealm都实现相同的协议,具有变量标题和统计信息.我想提取这些值,但我不关心实际存储的是哪个对象.请考虑以下内容:
switch data! {
case .salesReturn(let object):
titleString = object.title
statistics = object.stats
case .demand(let object):
titleString = object.title
statistics = object.stats
break
}
Run Code Online (Sandbox Code Playgroud)
我必须进入每个枚举值以获得协议的属性.我有什么方法可以做得更短更清洁?获取相关值,无论它是什么,只要它符合我的协议,并获得协议值?谢谢.
dal*_*ook 11
您可以向枚举中添加一个返回协议的属性.例如:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当您想要在枚举的特定值上访问这些属性时,只需使用:
let operation = RetailDemandReturnOperation.salesReturn(value: MSRetailSalesReturnRealm())
let title = operation.realm.title
Run Code Online (Sandbox Code Playgroud)