У меня есть объект FormField, который имеет два свойства: String name
и a value
, которые могут принимать любой тип - поэтому я сделал его Any!
. Тем не менее, мне сказали в отдельный вопрос использовать перечисление со связанными значениями вместо Any!
.
enum Value {
case Text(String!)
case CoreDataObject(NSManagedObject!)
}
class FormField {
var name: String
var value: Value?
// initializers...
}
Этот подход делает ужасно подробным для проверки недействительности. Если бы я хотел отобразить представление предупреждения для всех недостающих полей в форме, мне придется повторить проверку nil для каждого случая в инструкции switch:
for field in self.fields {
if let value = field.value {
switch value {
case .Text(let text):
if text == nil {
missingFields.append(field.name)
}
case .CoreDataObject(let object):
if object == nil {
missingFields.append(field.name)
}
}
}
}
Существует ли более короткий способ доступа к связанному с перечислением значению независимо от типа? Если я сделаю FormField.value a Any!
, приведенный выше код будет таким же простым, как:
for field in self.fields {
if field.value == nil {
missingFields.append(field.name)
}
}