let someString = "Some string literal value"
Swift之所以推断someString常量为字符串类型,是因为它使用了字面量方式进行初始化。
多行字符串字面量
如果你需要一个字符串是跨越多行的,那就使用多行字符串字面量—由一对三个双引号包裹着的具有固定顺序的文本字符集。
let quotation = """
The White Rabbit put on his spectacles.
"Begin at the beginning," the King said gravely, "and go on
till you come to the end; then stop."
"""
一个多行字符串字面量包含了所有的在开启和关闭引号(""")中的行。这个字符从开启引号(""")之后的第一行开始,到关闭引号(""")之前为止。之后的第一行开始,到关闭引号(""")之前为止。这就意味着字符串开启引号之后(""")或者结束引号(""")之前都没有换行符号。
下面两个字符串其实是一样的,虽然第二个使用了多行字符串的形式。
let singleLineString = "These are the same."
let multilineString = """
These are the same.
"""
如果你的代码中,多行字符串包含换行符的话,则多行字符串字面量中也会包含换行符。如果你想换行,以便加强代码的可读性,但是你又不想在你的多行字符串字面量中出现换行符的话,你可以用在行尾写一个反斜杠(\)作为续行符。
let softWrappedQuotation = """
The White Rabbit put on his spectacles. "Where shall I begin,\
please your Majesty?" he asked.
"Begin at the beginnig," the King said gravely, "and go on \
till you come to the end; then stop."
为了让一个多行字符串字面量开始和结束于换行符,请将换行写在第一行和最后一行。
let lineBreaks = """
This string starts with a line break.
It also ends with a line break.
"""
一个多行字符串字面量能够缩进来匹配周围的代码。关闭引号(""")之前的空白字符串告诉Swift编译器其它各行多少空白字符串需要忽略。然而,如果你在某行的前面写的空白字符串超出了关闭引号(""")之前的空白字符串,则超出部分将被包含在多行字符串字面量中。
在上面的例子中,尽管整个多行字符串字面量都是缩进的(源代码缩进),第一行和最后一行没有以空白字符串开始(实际的变量值)。中间一行的缩进用空白字符串(源代码缩进)比关闭引号(""")之前的空白字符串多,所以,它的行首将有4个空格。
字符串字面量的特殊字符串
字符串字面量可以包含以下特殊字符:
- 转义字符\0(空字符)、\\(反斜线)、\t(水平制表符,键盘上的tab键,输出四个空格)、\n(换行符)、\r(回车符)、\"(双引号)、\'(单引号)。
- Unicode标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的Unicode位码。
下面的代码为各种特殊字符的使用示例。wiseWords常量包含了两个双引号。dollarSign、blackHeart和sparklingHeart常量演示了三种不同格式的Unicode标量。
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowledge" - Einstein
let dollarSign = "\u{24}"
//$,Unicode标量U+0024
let blackHeart = "\u{2665}"
//♥,Unicode标量U+2665
let sparklingHeart = "\u{1F496}"
//💖,Unicode标量U+1F496
由于多行字符串字面量使用了三个双引号,而不是一个,所以你可以在多行字符串字面量里直接使用双引号(")而不必加上转义符(\)。要在多行字符串字面量中使用"""的话,就需要使用至少一个转义符(\)。
let threeDoubleQuotes = """
Escaping the first quote \"""
Escaping all three quotes \"\"\"
"""
扩展字符串分隔符
您可以将字符串文字放在扩展分隔符中,这样字符串中的特殊字符将会被直接包含而非转义后的效果。将字符串放在引号(")中并用数字符号(#)括起来。例如,打印字符串文字#"Line 1 \nLine 2"#会打印换行符转义序列(\n)而不是给文字换行。
如果需要字符串文字中的字符的特殊效果,请匹配转义字符(\)后面添加与起始位置个数相匹配的#符。例如,如果您的字符串是#"Line 1 \nLine 2"#并且您想要换行,则可以使用#"Line 1 #nLine 2"#来代替。同样,###"Line1 ###nLine2"###也可以实现换行效果。
扩展分隔符创建的字符串文字也可以是多行字符串文字。您可以使用扩展分隔符在多行字符串中包含文""",覆盖原有的结束文字的默认行为。
let threeMoreDoubleQuotationMarks = #"""
Here are three more double quotes:"""
"""#