Swift 字串速查表

發表於2015-12-22

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 的話,就意味著你不能直接將其作為下標來進行使用,因為這會導致越界。

當通過以下幾種方法進行字串修改的時候,startIndex 和 endIndex 就變得極其有用:

  • successor():獲取下一個元素
  • predecessor():獲取上一個元素
  • advancedBy(n):向前或者向後跳 n 個元素

下面是一些用例,注意到如果必要的話你可以將操作串聯起來:

Indices 屬性將返回字串中所有元素的範圍,這在遍歷集合的時候很有用:

你無法使用某個字串中的索引來訪問另一個字串。你可以通過 distanceTo 方法將索引轉換為整數值:

範圍的使用

要檢出字串集合中某個範圍內的元素的話,可以使用範圍。範圍可以通過 start 和 end 索引來完成建立:

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

通過索引或者範圍來擷取字串

要通過索引或者範圍來擷取字串的話,有許多方法:
QQ截圖20151218100052.png

獲取字首或者字尾

如果你需要得到或者拋棄字串前面或者後面的某些元素的話,可以:

 

插入或刪除

要在指定位置插入字元的話,可以通過索引:

要在索引出插入字串的話,那麼需要將字串轉換為字符集:

範圍替換

要替換一個範圍的字串內容的話:
41.png

新增元素

可以通過“+”運算子將字串相互連線起來,也可以使用 appendContentsOf 方法:

移除或者返回指定索引的元素

從一個字串當中移除某個元素,需要注意這個方法將會使該字串此前所有的任何索引標記(indice)失效。

範圍移除

移除字符集中某個範圍的字元,需要主要的是這個方法同樣也會使索引標記失效:

與 NSString 橋接

String 可以轉換為 NSString 從而與 Objective-C 橋接。如果 Swift 標準庫沒有你所需要的功能的話,那麼匯入 Foundation 框架,通過 NSString 來訪問這些你所需要的方法。

請注意這個橋接方法並不是無損的,因此儘可能使用 Swift 標準庫完成大部分功能。

檢索內含的字串

使用 NSString 方法的一個例子就是執行內含字串的檢索:

Playgournd

我發現在 Xcode 中通過 Playground 來熟悉 API 是一個非常好的選擇。如果你想要搶先體驗一下所有這些功能的話,這個文章的 Playground 可以從我的 Github 倉庫中下載。

相關文章