昨天我們學會了如何運用 Swift 的各種運算子來進行計算和判斷。今天,我們要來深入探索一個在 Day 2 已經打過照面的老朋友:文字。
當時我們對 字串(String) 與 字元(Character) 建立了基本認識,但它們的能耐遠不止於此!今天透過這篇教學文章,我們來學習更實用的操作方式,讓你未來能輕鬆應對各種文字處理的需求。
"A"
、"7"
、"!"
"Hello, Swift!"
let myCharacter: Character = "A" // 這是一個字元
let myString: String = "Hello, Swift!" // 這是一個字串
最常見的方式是直接用雙引號包住文字:
let greeting = "Hello World!" // 將字串字面量指派給常數
var userName = "Melodia" // 將字串字面量指派給變數
當文字跨多行時,用三個雙引號 """
包起來:
let longPoem = """
夜空中最亮的星,
能否聽清,
那遠方的聲音,
為我指引。
"""
print(longPoem)
var emptyString1 = "" // 直接指派空的字串字面量
var emptyString2 = String() // 使用 String 類型的初始化器
這兩種寫法都可以創建一個沒有任何內容的空字串,效果是完全一樣的,可以依照自己的程式撰寫習慣來選擇其中一種寫法。
就像其他資料型別,字串的可變性也由 var
和 let
決定。
這會直接影響你是否能修改字串的內容,例如追加文字。
var
宣告的字串是可變的 (mutable)。let
宣告的字串是不可變的 (immutable)。var variableString = "蘋果"
variableString += "和香蕉" // 沒問題,因為是 var
print(variableString) // 印出 蘋果和香蕉
let constantString = "橘子"
// constantString += "和檸檬" // 這行會直接報錯!因為 let 宣告的字串無法修改
字串本質上是有序的字元序列,可以用 for-in
逐字元遍歷:
for character in "Swift!" {
print(character)
}
// 印出結果:
// S
// w
// i
// f
// t
// !
使用 +
或 +=
連接字串或字元:
let part1 = "Hello "
let part2 = "World"
let wholeString = part1 + part2 + "!" // 使用 + 拼接多個字串
print(wholeString) // 印出:Hello World!
var part3 = "今天天氣"
part3 += "真好。" // 使用 += 追加內容
print(part3) // 印出:今天天氣真好。
字串插值能把變數、常數或運算結果直接嵌入字串,這個用法在前面文章有稍微提過:
let name = "Amy"
let age = 25
let message = "我的名字是 \(name),我今年 \(age) 歲。"
print(message) // 印出:我的名字是 Amy,我今年 25 歲。
一個很方便的用法,直接在裡面進行運算:
let price = 100
let quantity = 3
print("總價是:\(price * quantity) 元。") // 印出:總價是:300 元。
有時候,你需要在字串中表示一些特殊意義的字元,例如換行、Tab 鍵,或是雙引號本身。這時候就需要用到跳脫字元和 Unicode 純量。
跳脫字元 | 含義 |
---|---|
\n |
換行 |
\t |
水平 Tab |
\" |
雙引號 |
\\ |
反斜線 |
\r |
回車 |
\0 |
空字元 |
\"
:在字串中插入雙引號:
let quote = "他說: \"你好嗎?\""
print(quote) // 印出:他說: "你好嗎?"
\\
:代表一個反斜線:
let filePath = "C:\\Users\\Desktop\\file.txt"
print(filePath) // 印出:C:\Users\Desktop\file.txt
用 \u{n}
表示 Unicode 字元,n
是十六進制碼:
let heart = "\u{2764}"
print("我愛 Swift \(heart)") // 印出:我愛 Swift ❤️
let koreanCharacter = "\u{D55C}" // 韓文「한」的 Unicode 編碼
print("這是韓文字:\(koreanCharacter)") // 印出:這是韓文字:한
.count
比你想像的更聰明!Swift 的 .count
計算的是人類眼中「可見字元」的數量(又稱 字形叢集 Grapheme Cluster),而不是電腦底層的編碼數量。這讓它在處理 Emoji 和多國語言時表現更好。
let simpleEmoji = "❤️"
print(simpleEmoji.count) // 印出:1
let familyEmoji = "👨👩👧👦" // 這其實是由多個 Unicode 符號組合而成
print(familyEmoji.count) // 仍然印出:1
無論一個 Emoji 多複雜,Swift 都會將它視為一個單一字元來計算,這完全符合我們的直覺!
用 .count
屬性:
let myText = "鐵人賽加油!"
print("這個字串有 \(myText.count) 個字元。") // 印出:這個字串有 6 個字元。
==
與 !=
判斷是否相同:
let strA = "Apple"
let strB = "Apple"
let strC = "Banana"
if strA == strB {
print("strA 和 strB 內容相同。") // 會印出
}
if strA != strC {
print("strA 和 strC 內容不同。") // 會印出
}
檢查前綴 .hasPrefix()
: 判斷字串是否以指定的文字開頭:
let sentence = "今天天氣很好。"
if sentence.hasPrefix("今天") {
print("這句話是從『今天』開始的") // 會印出
}
檢查後綴 .hasSuffix()
: 判斷字串是否以指定的文字結尾:
let fileName = "document.pdf"
if fileName.hasSuffix(".pdf") {
print("這是 PDF 檔案") // 會印出
}
今天我們對 Swift 的文字處理能力進行了一次全面的升級!從區分字元與字串、建立多樣化的字串開始,我們打下了撰寫程式的基礎。
接著,我們掌握了修改與組合文字的核心技巧,不僅理解 var
與 let
帶來的可變性差異,也熟練了字串拼接與插值的運用。我們還學會了如何遍歷字元、使用 Unicode 與特殊符號,並透過 .count
和 .hasPrefix()
等方法來計算與比較字串。
想像一下,如果想用程式做一個「待辦事項」或「購物清單」,只靠我們目前學過的變數是辦不到的。我們需要一個能裝下一整排資料的容器!
明天,我們就要來認識 Swift 中最強大、也最常用的集合型別:陣列 (Array)。你將學會如何建立一個清單、隨時新增或刪除項目、並透過編號精準地取出任何一筆資料。這是管理大量有序資料的必備神技!
敬請期待《Day 6|Swift 陣列全攻略:有序資料的必備管理術!》