Xcode中是否有一个关键组合来实现协议?

时间:2008-10-11 16:00:13

标签: objective-c xcode refactoring code-generation

在Visual Studio中,如果我定义一个类来实现一个接口,例如

class MyObject : ISerializable {}

我可以右键单击ISerializable,从上下文菜单中选择“实现接口”,并查看我的类定义中出现的相应方法。

class MyObject : ISerializable {
    #region ISerializable Members
    public void GetObjectData(SerializationInfo info, 
                StreamingContext context)
    {
        throw new NotImplementedException();
    }
    #endregion
}

在Mac上的Xcode中是否有类似的功能?我希望能够以这种方式自动实现协议。也许使用生成的可选方法但注释掉了。

7 个答案:

答案 0 :(得分:22)

XCode目前不支持这种自动化。但是:使用协议引导代码的简单方法是选择单击类声明中的协议名称

@interface FooAppDelegate : NSObject <NSApplicationDelegate, 
                                      NSTableViewDelegate> {

快速打开定义协议的.h文件。从那里,复制并粘贴您感兴趣的方法。这些标题往往得到很好的评论,这有助于确定哪些方法可以安全地忽略。

答案 1 :(得分:6)

我还没有在Xcode中看到过这个功能。 但似乎有人可以在Scripts&gt;内部编写一个名为“Place Implementor Defs on Clipboard”的新用户脚本。代码。

您没有发现这有用。

答案 2 :(得分:5)

目前Xcode中没有这样的重构。

如果您愿意,请提交enhancement request

答案 3 :(得分:2)

我知道这个帖子有点旧,但我想知道同样的事情,发现了这个问题。

就我而言,我在接口(.h)中定义了一个属性,我想在实现(.m)中合成它。我还需要实现接口中定义的方法。是的,Xcode有助于其他人提到,但现代IDE为我们经常做的事情提供了这些生产力增强。看起来这仍然不是Xcode 4.3.3中的一个功能。但是,该功能在JetBrains' AppCode中可用。我只涉及试用,但它似乎一次只能有一个属性或方法,而不是整个界面,如Visual Studio。

答案 4 :(得分:1)

Xcode可以帮助你按照协议方法,假设你有这样的协议:

@protocol PosterousWebsitesDelegate <NSObject>
- (void)PosterousWebsitesLoadSuccess:(PosterousWebsites*)websites;
@end
<。>在.m文件的@implementation部分,您可以开始编写方法的名称,然后按ESC键自动完成方法/选择器的签名:

-(void)Poste (...press ESC...)

Xcode将自动完成@protocol方法的完整签名,使用TAB来确认代码。

如果你真的想要学习OSX / iOS开发,我建议你阅读“XCode 3 Unleashed”,这本书真的帮助我深入了解Xcode,我知道VS:)

答案 5 :(得分:1)

检查此插件

https://github.com/music4kid/FastStub-Xcode

它可以满足您的要求和更多。

答案 6 :(得分:0)

Macrumors也对此进行了讨论。有一些苹果脚本的链接。我实际上没有尝试过这些。