如何使用Xcode自动完成枚举开关?

问题描述 投票:19回答:8

假设你有一个枚举:

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岁的答案说这是不可能的,但也许从那时起发生了变化?有什么想法吗?

ios xcode enums
8个回答
22
投票

看到你的问题,并决定构建一个完全相同的Xcode插件。

看看:https://github.com/stefanceriu/SCXcodeSwitchExpander


12
投票

Short Answer :

使用Editor> Refactor> Add Missing Switch Cases

Xcode screenshot

Convenient way :

  1. 在Xcode中按Preferences + [command]打开[,]
  2. 转到Key Bindings选项卡并为命令Refactor > Add Missing Switch Cases设置快捷方式。 xcode preferences screenshot
  3. 在编辑器中输入快捷方式。确保光标位于switch字母上。 xcode gif

5
投票

不幸的是,Xcode开箱即用是不可能的。提交错误报告并选择请求增强选项。

https://bugreport.apple.com

实际上我最近自己做了这个,他们根据给定问题收到的重复数量来衡量错误/增强的严重性和重要性 - 因此无法搜索跟踪器的原因之一。


5
投票

在Xcode 10中执行以下操作

  1. 添加switch...case模板并设置你的枚举类型而不是self,以便xcode了解它应该自动完成的内容

  1. 将光标移动到单词qazxsw poi中并转到qazxsw poi qazxsw poi

这就是你将得到的结果switch


1
投票

虽然Xcode不会自动完成整个switch语句,但有一些技巧可以加速编写它们。这是我最近一直在做的事情:

  1. 启动开关自动完成,然后键入表达式
  2. 复制case块并粘贴足够的时间以覆盖所有枚举常量(实际上,我只是粘贴超过我需要的并稍后删除,而不是计数)
  3. 将光标移动到第一个常量占位符之前
  4. 按Tab键,然后按常量的第一个字母,然后按Enter键接受第一个自动完成建议
  5. 其余部分重复TAB,letter,ENTER。自动完成不会建议您已在交换机中使用的常量,因此每次使用时列表都会变窄。

当然,如果所有常量都以相同的字母开头,那确实很有帮助。在您的情况下,请考虑命名它们:

menu > editor > refactor > expand switch cases

1
投票

它不使用Xcode,但您可以使用任何脚本语言快速打磨已处理的代码段。把它作为插件放在你最喜欢的文本编辑器中(例如)。

我有一个文件夹,我放置这样的帮助器和typedef enum { dayOfWeekSunday, dayOfWeekMonday, dayOfWeekTuesday, dayOfWeekWednesday, dayOfWeekThursday, dayOfWeekFriday, dayOfWeekSaturday } enumDayOfWeek; 他们所以我可以随时使用这样:

Textmate

甚至更好地使用命令行粘贴板工具:

~/bin

chmod +x

事实证明

enumify.pl ~/tmp.txt

pbpaste | enumify.pl

0
投票

嘿,我在Swift中为它做了一个Xcode 8源编辑器扩展。

#! /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;

希望它有用!


0
投票

只需点击“修复”按钮,案例就会出现: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; }

© www.soinside.com 2019 - 2024. All rights reserved.