当前位置: 首页 > 文档资料 > Swift 编程语言 >

字符串和字符

优质
小牛编辑
147浏览
2023-12-01
字符串是一系列的字符,比如说 "hello, world"或者 "albatross"。Swift 的字符串用String类型来表示。String的内容可以通过各种方法来访问到,包括作为Character值的集合。

Swift 的 String  和 Character  类型提供了一种快速的符合 Unicode 的方式操作你的代码。字符串的创建和修改语法非常轻量易读,使用与 C 类似的字符串字面量语法。字符串串联只需要使用
+运算符即可,字符串的可修改能力通过选择常量和变量来进行管理,就如同 Swift 语言中的其他值。你同样可以使用字符串来插入常量、变量、字面量以及表达式到更长的字符串当中,这就是所谓的字符串插值。这样让创建自定义字符串值来显示、储存和打印值变得更加简单。

别看语法简单,Swift 的 String类型仍旧是快速和现代的字符串实现。每一个字符串都是由 Unicode 字符的独立编码组成,并且提供了多种 Unicode 表示下访问这些字符的支持。

注意

Swift 的 String类型桥接到了基础库中的 NSString类。Foundation 同时也扩展了所有 NSString 定义的方法给 String 。也就是说,如果你导入 Foundation ,就可以在 String 中访问所有的NSString  方法,无需转换格式。

更多在 Foundation 和 Cocoa 框架中使用 String的内容,参见 与 Cocoa 和 Objective-C 一起使用 Swift (Swift 4)(官网链接)。

字符串字面量

你可以在你的代码中插入预先写好的 String值作为字符串字面量。字符串字面量是被双引号(")包裹的固定顺序文本字符。

使用字符串字面量作为常量或者变量的初始值:

如果你需要很多行的字符串,使用多行字符串字面量。多行字符串字面量是用三个双引号引起来的一系列字符:

let quotation = """
The White Rabbit put on his spectacles.  "Where shall I begin,
please your Majesty?" he asked.
 
"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 beginning," 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 其他行前应该有多少空白是需要忽略的。比如说,尽管下面函数中多行字符串字面量缩进了,但实际上字符串不会以任何空白开头。

func generateQuotation() -> String {
    let quotation = """
        The White Rabbit put on his spectacles.  "Where shall I begin,
        please your Majesty?" he asked.
 
        "Begin at the beginning," the King said gravely, "and go on
        till you come to the end; then stop."
        """
    return quotation
}
print(quotation == generateQuotation())
// Prints "true"

总而言之,如果你在某行的空格超过了结束的双引号(""" ),那么这些空格被包含。

在上面的例子中,尽管整个多行字符串字面量被缩进了,字符串中的第一行和最后一行不会有任何空白。中间的行如果有比结束引号有更多的缩进,那么它就会有额外的四个空格的缩进。

字符串字面量里的特殊字符

字符串字面量能包含以下特殊字符:

  • 转义特殊字符 \0 (空字符),\\ (反斜杠),\t (水平制表符),\n (换行符),\r(回车符),\" (双引号) 以及\' (单引号);
  • 任意的 Unicode 标量,写作 \u{n},里边的n是一个 1-8 个与合法 Unicode 码位相等的16进制数字。

下边的代码展示了这些特殊字符的四个栗子。

wiseWords 常量包含了两个转义双引号字符,dollarSign,blackHeart 和 sparklingHeart 常量展示了 Unicode 标量格式:

let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"<br />
// "Imagination is more important than knowledge" - Einstein<br />
let dollarSign = "\u{24}" // $, Unicode scalar U+0024<br />
let blackHeart = "\u{2665}" // ♥, Unicode scalar U+2665<br />
let sparklingHeart = "\u{1F496}" // </p>