Есть ли более разумный способ переписать это?
if ([cardName isEqualToString:@"Six"]) {
[self setValue:6];
} else if ([cardName isEqualToString:@"Seven"]) {
[self setValue:7];
} else if ([cardName isEqualToString:@"Eight"]) {
[self setValue:8];
} else if ([cardName isEqualToString:@"Nine"]) {
[self setValue:9];
}
objective-c
switch-statement
Джеймс Райцев
источник
источник
Ответы:
К сожалению, они не могут. Это один из лучших и наиболее востребованных вариантов использования операторов switch, так что, надеюсь, они надеются на (сейчас) Java (и другие) победившую команду!
Если вы делаете имена карт, возможно, присвойте каждому объекту карты целочисленное значение и включите его. Или, возможно, enum, который считается числом и поэтому может быть включен.
например
В таком случае Ace будет равен случаю 0, два - случаю 1 и т. Д.
источник
CardType
не может быть равным никаким вложенным,@""
например:[CardType isEqualToString:@"Three"]
Вы можете настроить словарь блоков, например так:
Чтобы иметь раздел «по умолчанию», замените последнюю строку на:
Надеюсь, Apple научит «переключать» несколько новых трюков.
источник
Для меня приятный простой способ:
источник
К сожалению, операторы switch могут использоваться только для примитивных типов. Однако у вас есть несколько вариантов использования коллекций.
Вероятно, лучшим вариантом будет хранить каждое значение как запись в NSDictionary.
источник
Немного поздно, но для любого в будущем я смог заставить это работать на меня
источник
Вот более разумный способ написать это. Это использовать
NSNumberFormatter
в «стиле изложения» :Обратите внимание, что средство форматирования чисел хочет, чтобы строка была в нижнем регистре, поэтому мы должны сделать это сами, прежде чем передать ее в средство форматирования.
источник
Есть и другие способы сделать это, но
switch
это не один из них.Если у вас есть только несколько строк, как в вашем примере, код у вас в порядке. Если у вас есть много случаев, вы можете сохранить строки как ключи в словаре и найти соответствующее значение:
источник
НАДЕЖДА .. мой любимый "ObjC Add-On"
ObjectMatcher
И это работает с не-строками, ТОО ... даже в циклах!
Лучше всего, так мало
{...}
«s,:
» s и()
«sисточник
Objective-c ничем не отличается от c в этом аспекте, он может только включать то, что может c (и preproc def похож на NSInteger, NSUInteger, поскольку в конечном итоге они просто typedef'd для целочисленного типа).
Википедия:
Синтаксис :
Интегральные типы :
источник
Я немного опаздываю на вечеринку, но чтобы ответить на поставленный вопрос , есть более разумный способ:
Обратите внимание, что
indexOfObject
поиск совпадений будет выполнятьсяisEqual:
именно так, как в вопросе.источник
Основываясь на идее @Graham Perks, опубликованной ранее, мы разработали простой класс, чтобы сделать переключение между строками довольно простым и понятным.
Вы бы использовали это так:
Правильный блок будет выполняться в соответствии со строкой.
Суть для этого решения
источник
Я не могу прокомментировать ответ cris на @Cris answer, но я хотел бы сказать, что:
Существует ограничение для метода @ cris:
typedef enum не будет принимать буквенно-цифровые значения
Так вот еще один:
Ссылка Stack over flow Перейти к ответу этого пользователя "user1717750"
источник
Наслаждайтесь кодированием .....
источник