0

什么是最好的替换方法:

.doOnComplete {
    // Implementation
}

.do(
    onComplete: {
        // Implementation
    }
)

整个大型 Swift 代码库?鉴于有大量这些手动替换不是一种选择。

4

3 回答 3

1

根据代码的复杂性,这可能很难实现。

正确的方法确实是尝试捕获实现块。但是,重要的是要注意平衡的花括号,例如:

\.doOnComplete\s*(\{(?>[^{}]+|(?1))*\})

然后替换为

.do(\n\tonComplete: $1\t\n)

演示

PS:我试图漂亮地打印代码,但无论如何你都必须重新格式化代码。

于 2018-05-10T02:25:00.810 回答
0

Xcode 中的查找和替换功能有一个正则表达式选项。您应该能够制作一个正则表达式来执行此操作。

于 2018-05-10T00:23:00.453 回答
0

在 Xcode-Menu 的 Find>Find and Replace in Project...(或者⌥⇧⌘F)中。您到达通常可以找到 Project Navigator 的地方,现在是 Find Navigator。在最顶部选择而不是“文本”“正则表达式”:

Xcode 查找导航器

然后输入第一个文本字段(注意:我的方法不起作用,如果你的块在花括号内包含一些更多的花括号)

( *)\.doOnComplete \{([^\}]*)\}

紧随enter其后。在第二个文本字段下方,应该显示所有出现的.doOnComplete块。

现在您可以输入(每个 '[enter]' 表示control+q后跟enter

$1.do([enter]$1onComplete: {$2}[enter]$1)

在第二个文本字段中。之后,您应该选择第二个文本字段下方找到的事件之一,然后按“替换”按钮。如果替换正常并且块中的所有内容仍然存在,您可以按下“全部替换”按钮,整个项目中的所有内容都应该被替换。

于 2018-05-10T00:56:35.873 回答