字串代表文字資料。
在 Swift 中,String是一組有序的Character值集合,其中每個字元都代表一個 Unicode 字元。
你使用字串字面值來建立字串,也就是一串以雙引號(")包圍的字元。
如果要建立多行字串,請使用三個雙引號("""):
let hello: String = "Hello, World!"
let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""
Swift 字串能與 Foundation 框架的NSString類別無縫接軌,讓你使用豐富的文字處理功能。
Character代表單一的延伸字素叢集,也就是由一個或多個 Unicode 純量值組成人類可讀的字元。
Unicode 純量值是一個 21 位元的碼點,範圍從U+0000到U+D7FF(含),或從U+E000到U+10FFFF(含)。
let aChar: Character = "A"
當你寫下字串字面值時,Swift 會自動將它的型別推論為String。
若要把單一字元儲存成Character,你必須明確標註型別:
let aString = "A" // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar)) // Prints Character
// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'
你可以使用加號運算子(+)把字串連接起來:
print("honey" + "comb")
// Prints "honeycomb"
你無法直接用+把Character串接到String上,必須先將該字元轉換成字串才行。
不過,你可以使用append(_:)方法,把字串或字元直接附加到可變字串上:
var greeting = "Hello"
let world = ", world"
let period: Character = "."
greeting.append(world)
print(greeting) // Prints "Hello, world"
greeting.append(period)
print(greeting) // Prints "Hello, world."
字串內插讓你能在字串字面值中嵌入常數、變數、字面值和運算式,藉此建構字串。
把每個運算式用小括號包起來,並在前面加上反斜線(\( ... )):
let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"
字串和字元提供幾個屬性,讓你檢視它們的內容。
常見的字串屬性包括:
| 屬性 | 說明 | 範例 |
|---|---|---|
isEmpty |
若字串沒有任何字元,回傳true
|
"Hello".isEmpty的結果是false
|
count |
回傳字串中的字元數 |
"Hello".count的結果是5
|
完整的屬性清單請參閱 Apple 的 String 文件。
常見的字元屬性包括:
| 屬性 | 說明 | 範例 |
|---|---|---|
isLowercase |
若字元是小寫,回傳true
|
"a".isLowercase的結果是true
|
isUppercase |
若字元是大寫,回傳true
|
"A".isUppercase的結果是true
|
isNumber |
若字元是數字,回傳true
|
"1".isNumber的結果是true
|
isWhitespace |
若字元是空白字元,回傳true
|
" ".isWhitespace的結果是true
|
完整的屬性清單請參閱 Apple 的 Character 文件。
你可以使用String(_:)初始化器把其他型別轉換成字串,它支援Int、Double和Character等標準型別:
let charX: Character = "x"
print(String(charX)) // Prints "x"
print(String(110)) // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"
Swift 字串字面值支援幾種特殊字元的跳脫序列:
| 序列 | 說明 |
|---|---|
\0 |
空字元 |
\\ |
反斜線 |
\t |
水平定位字元 |
\n |
換行字元 |
\r |
歸位字元 |
\' |
單引號 |
\" |
雙引號 |
\u{n} |
任意 Unicode 純量值(十六進位) |
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.
let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖
在這個練習中,你會撰寫程式碼,協助一家招牌公司為他們的招牌製作自訂訊息。
定義以下常數字串,這些字串會用來製作招牌:
birthday:這個常數存放 "Birthday" 這個值valentine:這個常數存放 "Valentine's Day" 這個值anniversary:這個常數存放 "Anniversary" 這個字串定義以下常數字元,這些字元會用來製作招牌:
space:這個常數存放 " " 這個值(一個空格)exclamation:這個常數存放 "!" 這個值實作函式 buildSign(for:name:),它接受引數 for,這個引數存放你在第一個任務中定義的三個字串之一,以及引數 name,這是一個存放招牌對象姓名的字串。
你要使用串接來建立招牌的訊息,並記得重複使用已經定義好的常數。
這個函式應該以字串回傳招牌訊息。
buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"
buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"
實作函式 graduationFor(name:year:),它接受引數 name,這是一個存放招牌對象姓名的字串,以及引數 year,這是一個存放對方畢業年份的整數。
你要使用模板字串來建立招牌的訊息。
這個函式應該以字串回傳招牌訊息。
graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"
實作函式 costOf(sign:),它接受引數 sign,這是一個存放招牌訊息的字串。
招牌的基本價格是 20(以指定貨幣計)。此外,每個字母要花費 2(空白也計入計算)。
這個函式應該以整數回傳招牌的費用。
costOf(sign: "Happy Birthday Grandma!")
// returns 66