Xcode:是否可以自动创建符合协议接口所需方法的存根?

48

作为一个Eclipse / Java背景下的人,我最喜欢的功能之一是快速生成实现接口所需的所有方法的能力。在Eclipse中,我可以从源码菜单中选择“Override / implement”选项,并为接口中的任何方法生成stub方法。

我希望在Objective-C中也能做到同样的事情。例如,如果我声明了一个实现'NSCoding'协议的类,我希望Xcode自动生成必要的方法来实现这个协议。不得不查找然后复制/粘贴每个我尝试实现的协议所需方法的签名真是令人沮丧。

我已经尝试过一段时间来找出是否有可能做到这一点,但还没有找到令人满意的答案。在XCode中是否可能实现这一点呢?

10个回答

8

7
Accessorizer会为传递给它的实例变量编写编码和解码方法(适用于NSCoding协议和NSDocument归档)。它还可以生成字符串常量,可静态或使用自定义前缀#define;copyWithZone:;以及其他需要的内容 - 一切都可以通过服务或工具栏上的简单快捷方式完成。Accessorizer keyed archiving

1
需要为 Accessorized 启用 "辅助功能访问",现在可以在 Mavericks 上的 "系统偏好设置 > 安全性与隐私 > 隐私 > 辅助功能" 中找到。 - Chrstpsln
2
XCODE太蠢了。苹果需要多年才能达到IntelliJ和Android Studio的智能水平。 - zulkarnain shah

6

不是直接的答案,只是提示:

XCode原生不支持。

但是AppCode可以。

它可以自动执行这些操作(在您的许可下)。

如果协议中的某些方法标记为@required - AppCode将突出显示实现并建议实现这些方法。

example

@optional方法也可以自动实现(快捷键:control + I)。


这个回答与XCode无关。 - Anton Chikin
@AntonChikin,你说得对,这是一个提示,“是否可以自动创建协议接口所需方法的存根?” - skywinder

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中。


如果它们在协议中,那么您只需要在实现文件中包含它们,如果您需要它们而不是头文件。 - WineGoddess

1

由于被接受的答案给出的链接不再有效(并且被重定向到广告),这里有另一个很好的解释,介绍如何使用 accessorizer 创建协议方法存根。


0
在我的情况下,以下样式对我非常有帮助,从某种意义上解决了我的问题。
假设您有以下方法声明:
+(DBManager*)getSharedInstance;

从实现文件开始输入+ge,Xcode将自动选择方法。

+(DBManager*)getSharedInstance;

0

我知道这是一个老问题,但如果你想始终查看最新的定义,只需右键单击相关类并跳转到定义即可。在此处,所有当前非过时函数都存在,因此您不必依赖第三方来保持最新状态。


0

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

如何使用?

  • 在XCode上设置脚本(Shell Script),并为其分配快捷键(例如CMD+5)。
  • 选择您想要生成实现的接口文件中的行,并按下热键。
  • 您的.m文件将包含您选择的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接