2009-11-07 174 views
46

从Eclipse/Java背景来看,我最喜欢的功能之一就是能够快速地将接口所需的所有方法存根。在Eclipse中,我可以从源菜单中选择“覆盖/实现”来为接口的任何方法生成存根方法。Xcode:可能为协议接口所需的方法自动创建存根(stub)?

我想在Objective-C中做同样的事情。例如,如果我声明一个实现'NSCoding'协议的类,我希望Xcode自动生成实现此协议所需的方法。如果我想要实现每个协议,必须查找并复制/粘贴所需方法的签名,这是令人沮丧的。

我一直在尝试一段时间来找出这是否可能,但还没有发现任何有希望的东西。这在XCode中可能吗?

回答

7

访问器将编写传递给它的ivars的编码和解码方法(NSCoding协议和NSDocument归档)。它还将生成带有自定义前缀的静态或#定义字符串常量; copyWithZone:;还有其他的东西,如果你需要的话 - 所有这些都是通过服务或工具栏的简单快捷方式完成Accessorizer keyed archiving

+1

所需的存取电脑资料,“辅助设备的控制”现在是位于“系统偏好设置>安全和隐私>隐私>辅助功能”位于小牛。 – Christophe 2014-02-07 07:55:04

+0

配件看起来不错!它是否适用于Swift? – 2014-12-23 08:43:04

+2

非常愚蠢的XCODE。如果他们在协议中,Apple需要多年时间才能达到IntelliJ和Andoid Studio – 2016-02-17 09:49:31

1

您可以在AppleScript,Perl,Python,Ruby或脚本菜单中的任何其他脚本语言中为脚本菜单项创建脚本。

您可以将插入点放置在.m文件中并让脚本查找相应的.h文件。找到支持的协议等等...

MACTECH了一篇文章,在2007年Xcode Menu Scripts

1

的Xcode 3.2会自动填充知的方法实现。换句话说,如果方法是在某处(例如在协议中)声明的,那么当您开始在.m文件中键入它时,Xcode 3.2会为您自动完成方法签名。这不是你所要求的,但它非常方便。

1

我还在寻找一种方法来为我的头文件中的协议生成方法存根。我检查了Accessorizer,它看起来是一个方便的工具,但除非我错过了某些东西,我没有找到一种方法让它为协议生成方法存根。

Eric,如果您发现另一个解决方案,请发布您发现的内容。对我来说,XCode还没有将其内置到IDE中,这一点令人惊讶。

+0

的智能,如果您希望它们不是标头,则只需要它们在您的实施文件中 – WineGoddess 2013-06-21 11:07:28

+0

Yeah好吧WineGoddess .. Pfff ... – Tiwaz89 2014-01-27 07:24:53

0

基于AllanCraig的“创建@property,@synthesize &的dealloc从变量声明” Ruby脚本,我做了一个从接口的人产生实现存根:http://pastebin.com/4T2LTBh6

如何使用?

  • 在您的XCode(Shell脚本)上设置脚本并为其分配快捷方式(例如CMD + 5)。
  • 从您要在其中生成实施的界面文件中选择行,然后按热键。
  • 您的.m将包含您选择的方法。
+0

这不起作用为了我 !! – 2014-08-05 10:28:05

1

由于接受答案的给定链路不工作(并重定向到一个广告),here's如何使用accessorizer创建协议方法存根另一个很好的解释。

0

我知道这是一个古老的问题,但如果您想总是看到最新的定义,只需右键单击相关课程并跳到定义。这里隐藏了所有当前未被弃用的功能,因此您不依赖第三方来保持最新状态。

6

不是direсt答案,只是暗示:

开箱即用的XCode不能。

但是AppCode可以。

它可以自动执行此操作(当然,需要您的许可)。

如果协议的一些方法标记为@required - AppCode将突出实施,并建议实施这一方法。

example

@optional方法也可用于自动执行(快捷键:控制 + )。

+0

这个答案不是关于XCode。 – 2015-12-01 10:07:06

+0

@AntonChikin再次阅读这个答案的第一行。 – skywinder 2015-12-01 11:59:36

+0

这不是关于Xcode的暗示。 – 2015-12-02 19:15:33

0

在我的情况下风格帮助我很多,从某种意义上解决了我的问题。

假设你有以下方法声明:

+(DBManager*)getSharedInstance; 

从实现文件在你开始输入+ GE和Xcode中会自动选择方法

+(DBManager*)getSharedInstance;