/

Swift 中的字串

Swift 中的字串

本教程屬於 Swift 系列

字串是程式設計中最常用的工具之一。

在 Swift 中,可以使用字串文字語法來定義一個字串:

1
let name = "Roger"

我們使用雙引號來定義字串。單引號是不合法的字串界定符。

一個字串可以跨越多行,使用三個雙引號:

1
2
3
4
5
let description = """
a long
long
long description
"""

你可以使用字串插補 (string interpolation) 在字串中嵌入表達式:

1
2
3
4
5
6
let age = 8

let name = """
Roger, 年齡 \(age)
明年他將會是 \(age + 1)
"""

使用 + 運算子來連接兩個字串:

1
2
var name = "Roger"
name = name + " The Dog"

使用 += 運算子將文字附加到字串:

1
2
var name = "Roger"
name += " The Dog"

或者使用 append(_:) 方法:

1
2
var name = "Roger"
name.append(" The Dog")

你可以使用 count 屬性來計算字串中的字符數:

1
2
let name = "Roger"
name.count // 5

任何字串都附帶了一組有用的方法,例如:

  • removeFirst():刪除第一個字符
  • removeLast():刪除最後一個字符
  • lowercased():獲取一個新的小寫字串
  • uppercased():獲取一個新的大寫字串
  • starts(with:):如果字串以特定的子字串開始,則返回 true
  • contains():如果字串包含特定的字符,則返回 true

以及許多其他方法。

當你需要參考字串中的某個項目時,由於 Swift 中的字串是 Unicode 編碼,我們無法像 let name = "Roger" 中的字母 o 使用 name[1] 簡單地引用它。你需要使用索引來處理。

任何字串都提供了起始索引,使用 startIndex 屬性:

1
2
let name = "Roger"
name.startIndex // 0

要計算字串中的特定索引,請使用 index(_:offsetBy:) 方法計算:

1
2
3
let name = "Roger"
let i = name.index(name.startIndex, offsetBy: 2)
name[i] // "g"

索引也可以用於獲取子字串:

1
2
3
4
5
6
7
let name = "Roger"
let i = name.index(name.startIndex, offsetBy: 2)
name.suffix(from: i) // "ger"

// 或者使用下標索引:

name[i...] // "ger"

當你從字串中獲取子字串時,其結果的類型是 Substring,而不是 String

1
2
3
4
let name = "Roger"
let i = name.index(name.startIndex, offsetBy: 2)
print(type(of: name.suffix(from: i)))
// Substring

由於內部使用了相同的記憶體結構,子字串更省去記憶體,因此更加高效,但在處理大量字串時需要小心,因為你還是可以進行優化。

字串是集合,可以在迴圈中迭代它們。