注:学习笔记基于Swift 5.x字符串是一系列的字符,如:"hello,world" 、"albatross"。字符串是用双引号 (") 括起来的字符序列。使用字符串为常量或变量进行初始化:Swift的String类型是一种值类型。当字符串被传递给函数或方法时,或当它被分配给常量或变量时,函数、方法、常量或变量只是获取了字符串的副本,并不是原字符串。初始化空字符串,可通过空字符串字面量,或使用初始化语法初始化新的String实例:通过检查字符串的isEmpty属性来判断字符串是否为空多行字符串包括三个双引号括起来的字符序列,可以实现需要跨行的字符串。多行字符串包括左引号与右引号之间的所有行,包括空行。多行字符串中包含换行符时,该换行符也会出现在字符串的值中。多行字符串不能紧跟在左引号之后或右引号之前如果使用换行符使源代码更易于阅读,但不希望换行符成为字符串值的一部分,请在这些行的末尾写一个反斜杠\:多行字符串可以通过右引号前的空格来整体缩进以匹配周围的代码,但右引号前的空格不能比任一行字符串前的空格多,否则会报错。如果上图中的第一行只有两个空格,右引号前有四个空格,将会报错。转义字符包含 \0(空字符)、\\(反斜杠)、\t(水平选项卡)、\n(行进给)、\r(回车)、\"(双引号)、\'(单引号)。扩展分隔符可以使用#将字符串连同双引号包裹起来,多行字符串同理。Unicode字符可以通过写为\u{n}的形式,其中n是1-8位十六进制数字表示。Swift的字符串和字符类型完全符合Unicode。Swift的原生字符串类型是由Unicode标量值构建的。Unicode标量值是唯一的21位数字的字符或修饰符,例如拉丁语小字母A(“a”)的U+0061,或前脸小鸡(“ ”)的U+1F425。并非所有21位Unicode标量值都分配给字符——一些标量保留用于未来的分配或用于UTF-16编码。分配给字符的标量值通常也有一个名称,如上面示例中的拉丁小字母A和前脸小鸡。可以通过for - in循环访问字符串中的每一个字符,或使用String()将字符数组构建成字符串。字符串之间可以通过运算符+连接在一起,可以使用加法赋值运算符+= 将字符串值附加到现有的字符串变量中,也可以使用字符类型的append() 方法,将字符附加到现有的字符串中。无法将字符串或字符附加到一个现有的字符变量中,因为字符值仅能包含单个字符。字符串插值是一种通过将常量、变量、文字和表达式的值包含在字符串中来构建新字符串的方法。在扩展分隔符中使用字符串插值,要在\后输入与字符串首尾相同数量的扩展分隔符。要检索字符串中字符值的计数,请使用字符串的计数属性String.count。可以通过String的属性和方法,以及下标语法来访问与修改字符串。每个String值都有一个关联的索引类型String.Index,对应于字符串中每个Character的位置。Swift字符串无法按整数值进行索引。属性String.startIndex 字符串第一个字符的位置,属性String.endIndex 字符串最后一个字符之后的位置,因此endIndex不是字符串下标的有效参数。 空字符串,startIndex 与 endIndex 相等。方法String.index(before:)、String.index(after:) 访问给定索引之前和之后的索引,方法String.index(_:offsetBy:)访问给定索引的偏移量。使用indices属性访问字符串中单个字符的所有索引。可以在任何符合Collection协议的类型上使用startIndex和endIndex属性以及index(before:)index(after:)和index(_:offsetBy:)方法。这包括String,以及集合类型,如Array、Dictionary和Set。要在指定索引处将单个字符插入字符串,请使用insert(_:at:)方法。在指定索引处插入另一个字符串的内容,请使用insert(contentsOf:at:)方法。要从指定索引处的字符串中删除单个字符,请使用remove(at:)方法。删除指定范围内的子字符串,请使用removeSubrange(_:)方法。子字符串是从一个字符串获取的,与字符串一样,每个子字符串都有一个内存区域。字符串和子字符串的区别在于,作为性能优化,子字符串可以重用用于存储原始字符串的部分内存,或用于存储另一个子字符串的部分内存。子字符串不适合长期存储——因为它们重用原始字符串的存储,只要使用原始字符串的任何子字符串,整个原始字符串都必须保存在内存中。Swift提供了三种比较方式:字符串和字符的比较、前缀比较、后缀比较。如果两个字符串值(或两个字符值)的扩展字素簇在规范上等价,则视为相等。要检查字符串是否有特定的字符串前缀或后缀,请调用字符串的 hasPrefix(_:) 和 hasSuffix(_:) 方法。hasPrefix(_:)和hasSuffix(_:)方法在每个字符串中的扩展字素集群之间执行逐个字符的规范等价比较。详情参阅官网。