Ответ 1
Увидел ваш вопрос и решил построить плагин Xcode, который делает именно это.
Проверьте это: https://github.com/stefanceriu/SCXcodeSwitchExpander
Скажем, у вас есть перечисление:
typedef enum {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
} DayOfWeek;
при написании оператора switch Xcode пытается помочь с помощью фрагмента инструкции switch:
а затем:
отлично, но мне нужно перечислить все перечисления:
DayOfWeek day = ...; // a day of week
switch (day) {
case Sunday:
break;
case Monday:
break;
case Tuesday:
break;
case Wednesday:
break;
case Thursday:
break;
case Friday:
break;
case Saturday:
break;
default:
break;
}
К сожалению, нужно сделать это вручную:( Есть ли какой-нибудь известный фрагмент, чтобы заполнить все случаи? Конечно, я видел ответы от 3-х лет, что это невозможно, но с того времени что-то изменилось? Любые идеи?
Увидел ваш вопрос и решил построить плагин Xcode, который делает именно это.
Проверьте это: https://github.com/stefanceriu/SCXcodeSwitchExpander
Используйте Editor
> Refactor
> Add Missing Switch Cases
К сожалению, это невозможно с Xcode из коробки. Распечатайте отчет об ошибке и выберите опцию расширения.
Я действительно сделал это сам в последнее время, и они оценивают степень и важность ошибок/улучшений по количеству дубликатов, которые они получают для данной проблемы, поэтому одна из причин невозможности поиска трекера.
в Xcode 10 сделайте следующее
switch...case
и установите тип enum вместо self
чтобы xcode понимал, что он должен автозаполнитьswitch
слов и перейдите в menu > editor > refactor > expand switch cases
регистр menu > editor > refactor > expand switch cases
В то время как Xcode не будет автозаполнять весь оператор switch, есть уловки для ускорения их написания. Это то, что я делал в последнее время:
Конечно, это действительно помогает, если все константы начинаются с одной и той же буквы. В вашем случае рассмотрите их именование:
typedef enum {
dayOfWeekSunday,
dayOfWeekMonday,
dayOfWeekTuesday,
dayOfWeekWednesday,
dayOfWeekThursday,
dayOfWeekFriday,
dayOfWeekSaturday
} enumDayOfWeek;
Он не использует XCode, но вы можете очень быстро отрыть обработанные фрагменты с любым языком сценариев. Добавьте его как плагин в ваш любимый текстовый редактор (например, Textmate
).
У меня есть папка ~/bin
которую я chmod +x
таких помощников и chmod +x
чтобы я мог использовать их в любое время так:
enumify.pl ~/tmp.txt
или даже лучше использовать инструменты командной строки:
pbpaste | enumify.pl
#! /usr/bin/perl
#enumify.pl
#reads from STDIN or use filename as first arg
#on OS X combine with pbpaste e.g pbpaste | enumify.pl
sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s };
my @lines;
$filename = $ARGV[0];
if (length($filename) > 0) {
{ local *FILE; open FILE, "<$filename"; @lines = <FILE>; close FILE }
} else {
@lines = <STDIN>;
}
if (scalar @lines) {
my $target = "switch(<#switchvar#>) {\n";
my $enumlock = 0;
foreach (@lines) {
if ($enumlock == 0 && m/enum/) {
$enumlock = 1;
}
elsif ( $enumlock == 1) {
$_ = trim($_);
if (!(m/[{}]/) && (length($_)>0)) {
$_ =~ s/,//;
$target = "$target case $_:\nbreak;\n";
}
}
}
$target = "$target default:\nbreak;\n}\n";
if ( $enumlock == 1) {
print $target;
}
}
Получается
typedef enum {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
} DayOfWeek;
в
switch(<#switchvar#>) {
case Sunday:
break;
case Monday:
break;
case Tuesday:
break;
case Wednesday:
break;
case Thursday:
break;
case Friday:
break;
case Saturday:
break;
default:
break;
}
Привет, я сделал расширение редактора исходного кода Xcode 8 для этого в Swift.
https://github.com/timaktimak/SwitchCaseGenerator
Надеюсь, это полезно!