【问题标题】:Raw Strings in SwiftSwift 中的原始字符串
【发布时间】:2014-06-11 15:20:05
【问题描述】:

在 Swift 中是否有与 Scala 的 Raw String 或 C# 中的逐字字符串文字等效的功能?

不带转义字符的示例原始字符串(语法不正确):

val secretKey = """long\^578arandom&61~8791escaped&*^%@(chars"""

我尝试过简单地浏览一下语言文档,但还没有找到功能上的等价物。

【问题讨论】:

  • 不是我见过的。字符串文字看起来很像 C,即我认为您必须转义反斜杠和双引号,并且没有替代语法。
  • 你的意思是字符串插值吗?

标签: string swift


【解决方案1】:

Swift 5 现在支持原始字符串。使用此功能,反斜杠和引号将被解释为它们各自的文字符号。它们不被视为原始字符串中的转义字符或字符串终止符。

要使用原始字符串,使用# 符号(与python 使用'r' 或'R' 相同)。以下是在 swift 5 中使用原始字符串的变体数量:

let myPets = #"The name of my dog is "barky" and my cat is "smily"."#
//The name of my dog is "barky" and my cat is "smily".

原始字符串的内部 # 用于字符串插值,而不是通常的 swift 反斜杠。

let val = 1
let result = #"The answer is \#(val)."#
//The answer is 1

如果要在原始字符串中使用 #,请将 ## 放在开头和结尾。

let str = ##"I am happy bla#blablabla"##
//"I am happy bla#blablabla"

我猜原始字符串将有助于正则表达式,正则表达式定义中的反斜杠较少。例如:

let regex_Prev = "\\\\[A-Z]+[A-Za-z]+\\.[a-z]+"

现在我们可以写了:

let regex_Swift5version = #"\\[A-Z]+[A-Za-z]+\.[a-z]+"#

【讨论】:

    【解决方案2】:

    据说,这是在 Swift 5 中实现的,请参阅 SE-0200 – Support Raw Text。来自文档:

    您可以用一个或多个 # 字符填充字符串文字:

    #"She said, "This is dialog!""#
    // Equivalent to "She said, \"This is dialog!\""
    #"A \"quote"."#
    // Backslash interpreted as an extra character.
    

    目前预计 Swift 5 发布日期:“Early 2019”。

    【讨论】:

      【解决方案3】:

      目前没有这个功能,swift是新的。在会议上,演讲者鼓励我们报告您认为需要的任何内容。因此,我建议您报告您需要像 Scala 这样的原始字符串函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-26
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        相关资源
        最近更新 更多