[关闭]
@kakadee 2017-04-14T05:57:31.000000Z 字数 2834 阅读 1994

Swift 3.0 学习笔记-2-字符串和Unicode

iOS Swift


声明
Swift 3.0 学习笔记主要参考苹果开发者官网The Swift Programming Language (Swift 3.1)教程 以及 Swift 中文网


1. 字符串(String)

String 是一个有序的字符集合,例如 "hello, world", "albatross"。Swift 字符串通过 String 类型来表示,也可以表示为 Character 类型值的集合。

注意:Swift 的 String 类型与 Foundation NSString 类进行了无缝桥接。如果您利用 Cocoa 或 Cocoa Touch 中的 Foundation 框架进行工作,整个 NSString API 都可以调用您创建的任意 String 类型的值,您额外还可以在任意 API 中使用本章介绍的 String 特性。您也可以在任意要求传入NSString 实例作为参数的 API 中使用 String 类型的值进行替换。

1.1 字符串字面量

字符串字面量是由双引号包裹着的具有固定顺序的文本字符集。字符串字面量可以用于为常量和变量提供初始值。

  1. let someString = "Some string literal value"

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

  1. let wiseWords = "\"我是要成为海贼王的男人\" - 路飞"
  2. // "我是要成为海贼王的男人" - 路飞
  3. let dollarSign = "\u{24}" // $, Unicode scalar U+0024
  4. let blackHeart = "\u{2665}" // ♥, Unicode scalar U+2665
  5. let sparklingHeart = "\u{1F496}" // 💖, Unicode scalar U+1F496

1.2 初始化空字符串

  1. var emptyString = "" // 空字符串字面量
  2. var anotherEmptyString = String() // 初始化 String 实例
  3. // 两个字符串均为空并等价。

1.3 使用字符(Characters)

Swift 的 String 类型表示特定序列的字符值的集合。每一个字符值代表一个 Unicode 字符。您可利用 for-in 循环来遍历字符串中的每一个字符:

  1. for character in "Dog!" {
  2. print(character)
  3. }
  4. // D
  5. // o
  6. // g
  7. // !

1.4 计算字符数量 (countElements)

通过调用全局 countElements 函数并将字符串作为参数进行传递可以获取该字符串的字符数量。

  1. let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
  2. print("unusualMenagerie has \(countElements(unusualMenagerie)) characters")
  3. // prints "unusualMenagerie has 40 characters"

1.5 字符串插值

字符串插值是一种全新的构建字符串的方式,可以在其中包含常量、变量、字面量和表达式。您插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中:

  1. let multiplier = 3
  2. let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
  3. // message is "3 times 2.5 is 7.5"

注意:插值字符串中写在括号中的表达式不能包含非转义双引号 (") 和反斜杠 (),并且不能包含回车或换行符。

1.6 比较字符串

Swift 提供了三种方式来比较字符串的值:字符串相等,前缀相等和后缀相等。
字符串相等

字符串相等

如果两个字符串以同一顺序包含完全相同的字符,则认为两者字符串相等。

  1. let a = "sdfwe"
  2. let b = "dfew"
  3. let isEqual = a == b
  4. // false
  5. a.contains("dfw")

前缀后缀

  1. a.hasPrefix("sdf") // true
  2. b.hasSuffix("dew") // false

字符串包含

  1. a.contain("df") // true

2 Unicode

Unicode 是文本编码和表示的国际标准。它使您可以用标准格式表示来自任意语言几乎所有的字符,并能够对文本文件或网页这样的外部资源中的字符进行读写操作。

2.1 Unicode 含义

Unicode 中每一个字符都可以被解释为一个或多个 unicode 标量。字符的 unicode 标量是一个唯一的21位数字(和名称),例如U+0061 表示小写的拉丁字母A ("a"),U+1F425 表示正面站立的鸡宝宝 ("🐥")

当 Unicode 字符串被写进文本文件或其他存储结构当中,这些 unicode 标量将会按照 Unicode 定义的集中格式之一进行编码。其包括 UTF-8 (以8位代码单元进行编码) 和 UTF-16 (以16位代码单元进行编码)。

2.2 字符串的 Unicode 表示

Swift 提供了几种不同的方式来访问字符串的 Unicode 表示。

  1. let dogString = "Dog!🐶"
  2. for codeUnit in dogString.utf8 {
  3. print("\(codeUnit) ")
  4. }
  5. print("\n")
  6. // 68 111 103 33 240 159 144 182

上面的例子中,前四个10进制代码单元值 (68, 111, 103, 33) 代表了字符 D o g 和 ! ,他们的 UTF-8 表示与 ASCII 表示相同。后四个代码单元值 (240, 159, 144, 182) 是 狗脸表情 的4位 UTF-8 表示。

  1. for codeUnit in dogString.utf16 {
  2. print("\(codeUnit) ")
  3. }
  4. print("\n")
  5. // 68 111 103 33 55357 56374
  1. for scalar in dogString.unicodeScalars {
  2. print("\(scalar.value) ")
  3. }
  4. print("\n")
  5. // 68 111 103 33 128054
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注