Есть ли более своеобразный способ написания перечисления с одинаковыми типами аргументов, но в разных случаях?

#swift

#swift

Вопрос:

У меня есть перечисление, подобное этому:

  enum ValidationMatchingStrategy {
    case contains(pattern: String, error: String? = nil)
    case doesNotContain(pattern: String, error: String? = nil)
    case matches(pattern: String, error: String? = nil)
    case doesNotMatch(pattern: String, error: String? = nil)
}
 

В зависимости от случая я по-разному оцениваю связанные значения для выражений регулярных выражений. Однако каждый случай имеет один и тот же тип аргумента для каждого и не выглядит хорошо написанным. Есть ли лучший подход для создания этого перечисления?

Комментарии:

1. Почему ValidationMatchingStrategy с ним связана ошибка?

2. Своеобразный? Или идиоматический?

Ответ №1:

Возможно, перечисление не должно иметь связанных значений,

 enum ValidationMatchingStrategy {
    case contains
    case doesNotContain
    case matches
    case doesNotMatch
}
 

И вы должны создать другой тип и использовать композицию для объединения a ValidationMatchingStrategy , шаблона и ошибки:

 struct ValidationStrategy {
    let matchingStrategy: ValidationMatchingStrategy
    let pattern: String
    let error: String?
}