Swift中的String本身不是一个集合,不过它提供了一些属性来将其内容表示为集合。不同的属性可以将字符串呈现为不同的可视化及数据表示的视图,主要有4种类型:

  1. Character View(characters属性,类型为String.Character​View):扩展字符集群的集合,类似于自然语言字符。主要是以Unicode字符来表示;
  2. Unicode Scalar View(unicode Scalars,类型为String.Unicode​Scalar​View):Unicode标题值的集合,即以21-bit作为Unicode的基本单元的值;
  3. UTF-16 View(utf16属性,类型为String.UTF16View):UTF-16字符的集合,即以16-bit作为Unicode的基本单元的值;
  4. UTF-8 View(utf8属性,类型为String.UTF8View):UTF-8字符的集合,即以8-bit作为Unicode的基本单元的值;如果Swift要和C API交互,则String以这种格式传递给C函数;

官方文档给了一个实例,如图1所示,可以看到这几种表示方式的区别。

let cafe = "Cafe\u{301} du 🌍"

print(cafe.unicodeScalars.count)
// Prints "10"
print(Array(cafe.unicodeScalars))
// Prints "["C", "a", "f", "e", "\u{0301}", " ", "d", "u", " ", "\u{0001F30D}"]"
print(cafe.unicodeScalars.map { $0.value })
// Prints "[67, 97, 102, 101, 769, 32, 100, 117, 32, 127757]"

print(cafe.utf16.count)
// Prints "11"
print(Array(cafe.utf16))
// Prints "[67, 97, 102, 101, 769, 32, 100, 117, 32, 55356, 57101]"

print(cafe.utf8.count)
// Prints "14"
print(Array(cafe.utf8))
// Prints "[67, 97, 102, 101, 204, 129, 32, 100, 117, 32, 240, 159, 140, 141]"

参考

  1. String