如何防止xcode处理< ##>作为代码段占位符

时间:2014-08-19 01:42:43

标签: objective-c xcode token code-snippets

我想要包含< ##>在Objective C程序中的文字字符串中。但是,Xcode会自动替换字符串,认为它应该是代码片段中使用的占位符。

e.g。

NSString *pattern = @"<#foo#>"

尝试将其放入Xcode中,然后重新显示为foo的占位符。

在实际的程序中,字符串是RE,就像这个<#(.*)#>一样,令人惊讶的是,代码实际上按预期工作 - 问题只在Xcode的显示中表现出来。真正的问题是,这会造成一种脆弱的情况,在编辑器中,很容易导致文本被意外替换。

作为一种解决方法,我可以从它的部分构造字符串

NSString *p1 = @"<#(.*)";
NSString *p2 = @"#>";
NSString *pattern = [NSString stringWithFormat:@"%@%@",p1,p2];

但这不是很令人满意。

有没有人知道在Xcode中覆盖此行为的更好方法?

2 个答案:

答案 0 :(得分:5)

您可以通过利用字符串连接来避免不良行为,例如

NSString *str = @"<" "#foo#" ">";

答案 1 :(得分:2)

Swift 4,Xcode 9 - 您只需要分离或替换一个字符以使序列工作。仍然不完美...

字符串连接:

let pattern = "<" + "#foo#>"

字符串插值:

let pattern = "\("<")#foo#>"

百分比编码:

let pattern = "%003c#foo#>".removingPercentEncoding

有趣的事实:将模式打印到控制台显示为占位符foo

事实并非如此有趣:您无法将模式打印到日志中。由于它是通过连接或其他运行时处理创建的,因此它不符合日志消息中所需的StaticString类型。

更新:可以在日志中使用该模式(不过,它再次显示为占位符 - 唉!)。要超越StaticString问题,您可以在日志语句中使用%@

let pattern = "<" + "#foo#>" // or whichever version you like best
os_log("%@", log: .default, type: .debug, pattern)