11

有没有办法让 Xcode 不重新格式化格式化的代码,或者有没有像 uncrustify 这样的工具可以格式化使用块的源代码?

使用 Objective-c 中的块,代码变得难以阅读。一种解决方案是写出块定义并将花括号放在新行上,如下所示:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void)
{
    //block of code
});

和:

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop)
{
    //block of code
}];

美丽而轻松!

但是 Xcode 不保留这种格式,我找不到一种方法来使输出代码变得不可信。Uncrustify 真的很好,但也许块太新了?

有任何想法吗?

[免责声明:我知道这可能会变成“巨魔小时”,但代码应该尽可能易于阅读,并且在同一列上使用大括号会使事情变得更加清晰(对我来说)。特别是如果您在一个块中有多个块。所以如果你不喜欢这样的代码,请试着忽略这个问题。]

4

2 回答 2

3

最新的(大约 2 个月左右)更新 unrustify 几乎解决了这个问题。只需在配置文件中设置以下项目:

indent_oc_block                          = true 
indent_with_tabs                         = 0        
indent_columns                           = 4        # set to the same as indent_switch_case
indent_switch_case                       = 4        # set to the same as indent_columns

(我使用 indent_with_tabs = 0 因为我无法让它与标签一起使用。可能没有必要。)

当然,对于 {} 之后/之前的新行,请将 nl_some_parameter_brace 的所有内容设置为“强制”。

现在 uncrustify 将处理您的代码,它不会为您将新行插入块中,这样的代码将保持丑陋:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) {
    //code
}

如果有人找到一种让它适当地插入新行的方法,请告诉我。

感谢@ipmcc 对 uncrustify 的更新。

编辑:是的,每当您复制/粘贴时,xCode 都会混淆代码。我使用这个很棒的 xCode 插件来简化工作流程:https ://github.com/benoitsan/BBUncrustifyPlugin-Xcode

编辑 2:Uncrustify 不能很好地处理嵌套块(仍然比 Xcode 好)。例如,嵌套块变为:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void)
{
    [array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
        {
            [array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
                {
                    NSLog(@"the pumpkin pie!");
                }];
        }];
});
于 2013-03-17T10:21:40.420 回答
-1

XCode 使用内置的“代码片段”进行自动完成。通过单击{}库窗格中的图标打开代码片段库。您不能直接在 XCode 本身内编辑片段,但应用程序SnippetEdit允许您编辑它们。

我建议您在编辑之前备份“codesnippets”文件。它位于/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets

于 2013-02-13T19:31:40.957 回答