2014-09-30 5 views
7

Учитывая следующее перечисление на C# и переключатель/case, чтобы вернуть цвет границы текстового поля в соответствии с его состоянием, например.Объединить случай по умолчанию с другими случаями

enum TextboxState { 
Default, 
Error 
} 

switch(foo) { 
default: 
case TextboxState.Default: return Color.Black; 
case TextboxState.Error: return Color.Red; 
} 

Поэтому в основном я определить реальный, а не только по соглашению состояния по умолчанию аки TextboxState.Default путем добавления default: случая. Я просто хочу сделать это, чтобы предотвратить будущие изменения, если новые значения будут добавлены в перечисление.

Согласно Свифта книге это не представляется возможным:

«Если он не подходит, чтобы обеспечить кожух переключателя для каждого возможного значения, вы можете определить кетчуп все по умолчанию случай, чтобы покрыть любые значения , которые не рассматриваются явно. Это всеобъемлющая случай указывает ключевое слово по умолчанию, и всегда должен появиться последний

Абзац довольно четкое представление о том, что, поэтому я полагаю, мой рисунок выше не относится к Swift или я что-то упустить? Есть ли другой способ архивировать что-то вроде вышеуказанного кода?

ответ

11

Для этого вы можете использовать fallthrough, перемещая общее поведение в случае default и используя fallthrough во всех случаях, для которых требуется совместное поведение.

Например, если это ваше перечисление (добавлен 3-й случай, чтобы показать, что может обрабатывать несколько прошлифованное падение):

enum TextboxState { 
    case Default 
    case Error 
    case SomethingElse 
} 

вы можете форматировать switch заявления следующим образом:

switch(foo) { 
case TextboxState.Error: 
    return UIColor.redColor() 

case TextboxState.Default: 
    fallthrough 

case TextboxState.SomethingElse: 
    fallthrough 

default: 
    return UIColor.blackColor() 
} 

Каждый fallthrough перемещает точку выполнения в следующий случай, вплоть до default.

+1

Для справки, прохождение документа описано в разделе коммутатора здесь: https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html –

1

Удалить строку default: от вашего switch. Даже если вы когда-нибудь добавите дополнительные случаи в свой список, компилятор Swift будет жаловаться, если вы не добавите соответствующие случаи для каждого switch, который использует перечисление. И FYI, вам не нужно указывать TextboxState. до значений case в switch, потому что компилятор знает, что foo - это TextboxState. Полученный код будет:

switch(foo) { 
    case .Default: return Color.Black; 
    case .Error: return Color.Red; 
} 

хотя, по консистенции, я бы поставил .Error дело до .Default один.

Смежные вопросы