我有枚举:

enum RetailDemandReturnOperation {
    case salesReturn(value: MSRetailSalesReturnRealm)
    case demand(value: MSRetailDemandRealm)
}
MSRetailDemandRealmMSRetailDemandRealm都实现相同的协议(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

10-08 14:41