字符串编码和分解

Swift StringUnicode 代码点组成。它可以以几种不同的方式进行分解和编码。

let str = "ที่👌①!"

分解字符串

字符串的 characters 是 Unicode 扩展字形集群

Array(str.characters)  // ["ที่", "👌", "①", "!"]

unicodeScalars 是构成字符串的 Unicode 代码点 (注意ที่是一个字形簇,但是 3 个代码点 –3607,3637,3656 - 所以得到的数组的长度与 characters 不同):

str.unicodeScalars.map{ $0.value }  // [3607, 3637, 3656, 128076, 9312, 33]

你可以将字符串编码和分解为 UTF-8 (一系列 UInt8s)或 UTF-16 (一系列 UInt16s):

Array(str.utf8)   // [224, 184, 151, 224, 184, 181, 224, 185, 136, 240, 159, 145, 140, 226, 145, 160, 33]
Array(str.utf16)  // [3607, 3637, 3656, 55357, 56396, 9312, 33]

字符串长度和迭代

字符串的 charactersunicodeScalarsutf8utf16 都是 Collection ,所以你可以得到他们的 count 并迭代它们:

// NOTE: These operations are NOT necessarily fast/cheap! 

str.characters.count     // 4
str.unicodeScalars.count // 6
str.utf8.count           // 17
str.utf16.count          // 7
for c in str.characters { // ...
for u in str.unicodeScalars { // ...
for byte in str.utf8 { // ...
for byte in str.utf16 { // ...