【发布时间】:2020-05-19 14:31:02
【问题描述】:
我有多个枚举,它们都将共享相同的功能。有没有办法编写一次这个函数并让它出现在所有指定的枚举中?这是一个例子:
enum CustomerTypes: Int, CaseIterable {
case NewCustomer = 0
case ExistingCustomer
case Myself
private var title: String {
switch self {
case .NewCustomer : return StandardStrings.NewDrive.NewCustomer.string
case .ExistingCustomer : return StandardStrings.NewDrive.ExistingCustomer.string
case .Myself : return StandardStrings.NewDrive.Myself.string
}
}
static var titles: [String] {
get {
var toReturn: [String] = []
for value in allCases {
toReturn.append(value.title)
}
return toReturn
}
}
}
enum EnquiryTypes: Int, CaseIterable {
case Phone = 0
case FaceToFace
private var title: String {
switch self {
case .Phone : return StandardStrings.Misc.Phone.string
case .FaceToFace : return StandardStrings.Misc.FaceToFace.string
}
}
static var titles: [String] {
get {
var toReturn: [String] = []
for value in allCases {
toReturn.append(value.title)
}
return toReturn
}
}
}
正如您在此处看到的,两个枚举共享相同的“标题”变量。有没有办法我可以创建一个枚举/类,他们可以从中继承这个函数?
以下是我尝试过的一些方法:
Can you extend an enum?
我考虑过这一点,但我不想扩展所有具有 Int rawValues 的函数
我考虑过创建一个协议,然后创建一个采用这样的协议的函数,但我仍然需要在每个枚举上实现 _allCases(因为你不能从 CaseIterable 继承):
protocol RBEnum {
var title: String { get }
var _allCases: [RBEnum] { get }
}
那么有什么想法可以避免在这些枚举上违反 DRY 原则吗?
【问题讨论】: