【问题标题】:How to prevent xcode treating <# #> as a code snippet placeholder如何防止 xcode 将 <# #> 视为代码片段占位符
【发布时间】:2014-10-12 00:37:15
【问题描述】:

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

例如

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

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

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

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

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

但这不是很令人满意。

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

【问题讨论】:

    标签: objective-c xcode token code-snippets


    【解决方案1】:

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

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

    【讨论】:

    • @Tommy Xcode 似乎并不关心这两种方式,而且没有所有额外的 '@'s 会更干净。
    • 那么我想我在 Objective-C 语法更改方面落后了。不管怎样,你得到了我的 +1。
    • 您可以通过这种方式连接 Objective-C 文字字符串和 C 文字字符串。根据我刚刚做的测试,我相信它总是使用第一个元素的类型。
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2019-03-11
      • 2021-03-07
      相关资源
      最近更新 更多