Swift 字符串速查表

525 查看

Swift 的字符串 API 似乎让人难以习惯。此外,每次 Swift 与其标准库版本更新的时候,字符串的 API 也时不时会发生改变。你在 Stack Overflow 上寻找到的 Swift 1.2 解决方案往往不能在 Swift 2 上按照预期(甚至完全不能)使用。虽然从好的方面来看,我发现苹果的官方文档是非常有用的(参见本文底部的链接),但是出于备查的目的以及为了帮助仍挣扎于其中的人们,在此我仍旧了列出一系列的 String 代码片段:

Gist 和我 Github 仓库中的 Playground 都已提供)

字符串初始化

创建一个字符串对象有无数种方式可以使用,包括字面量、从其他 Swift 类型转换、Unicode等等。

字符串是值类型

字符串是值类型(Value Type),当用其赋值或者函数传参的时候它会被拷贝(copied)。所拷贝的值在修改的时候是懒加载的(lazy)。

字符串检测(空值、等值以及次序)

检测一个字符串是否为空:

Swift 是支持 Unicode 编码的,因此相等运算符(”==”)将会判断 Unicode 的范式是否等价(canonical equivalence)。这意味着对于两个字符串来说,如果拥有相同的语义(linguistic meaning)和表现形式的话,即使它们由不同 Unicode 标量(scalar)组成,那么也认为这两个字符串相等:

比较次序的话:

  • startIndex:返回首个元素的位置,如果为空,那么和 endIndex 的值相同。
  • endIndex:返回字符串逾尾(past the end)的位置。

注意到如果使用 endIndex 的话,就意味着你不能直接将其作为下标来进行使用,因为这会导致越界。

1
2
3
let cafe = "café"
cafe.startIndex   // 0
cafe.endIndex     // 4 - 最后一个字符之后的位置

当通过以下几种方法进行字符串修改的时候,startIndex 和 endIndex 就变得极其有用:

  • successor():获取下一个元素
  • predecessor():获取上一个元素
  • advancedBy(n):向前或者向后跳 n 个元素

下面是一些用例,注意到如果必要的话你可以将操作串联起来:

Indices 属性将返回字符串中所有元素的范围,这在遍历集合的时候很有用:

你无法使用某个字符串中的索引来访问另一个字符串。你可以通过 distanceTo 方法将索引转换为整数值:

范围的使用

要检出字符串集合中某个范围内的元素的话,可以使用范围。范围可以通过 start 和 end 索引来完成创建:

使用 “…” 或者 “..40.png

通过索引或者范围来截取字符串

要通过索引或者范围来截取字符串的话,有许多方法:
QQ截图20151218100052.png

获取前缀或者后缀

如果你需要得到或者抛弃字符串前面或者后面的某些元素的话,可以:

 

插入或删除

要在指定位置插入字符的话,可以通过索引: