美文网首页
Swift-字符串和字符(一)

Swift-字符串和字符(一)

作者: 小驴拉磨 | 来源:发表于2018-05-22 17:56 被阅读15次

字符串字面量

字符串字面量可以用于为常量和变量提供初始值:

let someString = "Some string literal value"

注意someString常量通过字符串字面量进行初始化,Swift 会推断该常量为String类型。

  • 多行字符串字面量
    由一对三个双引号包裹着的具有固定顺序的文本字符集:
let welcomeMessgae = """
        如果你需要一个字符串是跨越多行的,
        那就使用多行字符串字面量
        由一对三个双引号包裹着的具有固定顺序的文本字符集
        """

一个多行字符串字面量包含了所有的在开启和关闭引号(""")中的行。这个字符从开启引号(""")之后的第一行开始,到关闭引号(""")之前为止。这就意味着字符串开启引号之后(""")或者结束引号(""")之前都没有换行符号。(译者:下面两个字符串其实是一样的,虽然第二个使用了多行字符串的形式)

let singleLineString = "These are the same."
let multilineString = """
These are the same.
"""

如果你的代码中,多行字符串字面量包含换行符的话,则多行字符串字面量中也会包含换行符。如果你想换行,以便加强代码的可读性,但是你又不想在你的多行字符串字面量中出现换行符的话,你可以用在行尾写一个反斜杠()作为续行符。

let welcomeMessgae = """
        如果你需要一个字符串是跨越多行的,\
        那就使用多行字符串字面量

        由一对三个双引号包裹着的\
        具有固定顺序的文本字符集
        """

为了让一个多行字符串字面量开始和结束于换行符,请将换行写在第一行和最后一行,例如:

let welcomeMessgae = """

        如果你需要一个字符串是跨越多行的,\
        那就使用多行字符串字面量
        由一对三个双引号包裹着的具有固定顺序的文本字符集

        """

一个多行字符串字面量能够缩进来匹配周围的代码。关闭引号(""")之前的空白字符串告诉Swift编译器其他各行多少空白字符串需要忽略。然而,如果你在某行的前面写的空白字符串超出了关闭引号(""")之前的空白字符串,则超出部分将被包含在多行字符串字面量中。

image

在上面的例子中,尽管整个多行字符串字面量都是缩进的(源代码缩进),第一行和最后一行没有以空白字符串开始(实际的变量值)。中间一行的缩进用空白字符串(源代码缩进)比关闭引号(""")之前的空白字符串多,所以,它的行首将有4个空格。

  • 字符串字面量的特殊字符
    字符串字面量可以包含以下特殊字符:

  • 转义字符\0(空字符)、\(反斜线)、\t(水平制表符)、\n(换行符)、\r(回车符)、"(双引号)、'(单引号)。

  • Unicode 标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。

下面的代码为各种特殊字符的使用示例。 wiseWords常量包含了两个双引号。 dollarSign、blackHeart和sparklingHeart常量演示了三种不同格式的 Unicode 标量:

let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imageination is more important than knowledge" - Enistein
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 \"\"\"
"""

初始化空字符串

var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化方法
// 两个字符串均为空并等价。

您可以通过检查其Bool类型的isEmpty属性来判断该字符串是否为空:

if emptyString.isEmpty {
    print("Nothing to see here")
}
// 打印输出:"Nothing to see here"

字符串可变性

您可以通过将一个特定字符串分配给一个变量来对其进行修改,或者分配给一个常量来保证其不会被修改:

var variableString = "Horse"
variableString += " and carriage"
// variableString 现在为 "Horse and carriage"

let constantString = "Highlander"
constantString += " and another Highlander"
// 这会报告一个编译错误 (compile-time error) - 常量字符串不可以被修改。

字符串是值类型

Swift 的String类型是值类型。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值。 很明显无论该值来自于哪里,都是您独自拥有的。 您可以确信传递的字符串不会被修改,除非你自己去修改它。

在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您将字符串作为值类型的同时可以获得极高的性能。

原文出自51Swift转载请保留原文链接

相关文章

  • Swift-字符串和字符(一)

    字符串字面量 字符串字面量可以用于为常量和变量提供初始值: 注意someString常量通过字符串字面量进行初始化...

  • Swift-字符串和字符

    Swift的String类型是用Foundation的NSString类来桥接的。 Foundation还扩展了S...

  • Swift-字符串和字符

    字符串 *使用三引号创建多段字符串,必须换行,中间的引号不需要转移(Swift 4.0) 字符 用Characte...

  • Swift-字符串和字符

    一个字符串 是一系列字符的集合,例如hello, world和albatross。Swift的字符串是String...

  • Swift-字符串和字符(二)

    字符的使用 您可通过for-in循环来遍历字符串,获取字符串中每一个字符的值: 另外,通过标明一个Characte...

  • swift-字符串

    在oc语言中,NSString来申明一个字符串。 在swift语言中,用String来申明一个字符串,学习过jav...

  • swift-字符串

    获取文件名的后缀

  • swift-字符串

    字符串 在 Swift 中绝大多数的情况下,推荐使用 String 类型 使用 String 的原因 String...

  • iOS Swift中String的常用操作以及数据转化

    一、String的常用操作 1、字符和字符串的定义 2、判断字符串 3、 拼接和添加字符串 4、字符计数及字符串索...

  • C++之string

    字符串构造和赋值操作 实例 存取字符 实例 字符串拼接操作 实例 字符串查找和替换 实例 字符串比较 实例 字符串...

网友评论

      本文标题:Swift-字符串和字符(一)

      本文链接:https://www.haomeiwen.com/subject/dzxkjftx.html