字符串字面量
代碼中包含一段預(yù)定義的字符串值作為字符串字面量。字符串字面量是由雙引號包裹著的具有固定順序的文本字符。
字符串字面量可以用于為常量和變量提供初始值。
let someString = "Some string literal value" //someString 常量通過字符串字面量進行初始化,Swift 因此推斷其為 String 類型。
字符串字面量可以包含以下特殊字符:
- 1.轉(zhuǎn)義特殊字符 \0 (空字符)、\(反斜線)、\t (水平制表符)、\n (換行符)、\r (回車符)、" (雙引號)、' (單引號)。
- 2.單字節(jié) Unicode 標(biāo)量,寫成 \xnn,其中 nn 為兩位十六進制數(shù)。
- 3.雙字節(jié) Unicode 標(biāo)量,寫成 \unnnn,其中 nnnn 為四位十六進制數(shù)。
- 4.四字節(jié) Unicode 標(biāo)量,寫成 \Unnnnnnnn,其中 nnnnnnnn 為八位十六進制數(shù)。
舉個??
wiseWords 常量包含了兩個轉(zhuǎn)移特殊字符 (雙括號);dollarSign、blackHeart 和 sparklingHeart 常量演示了三種不同格式的 Unicode 標(biāo)量:
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowledge" - Einstein
let dollarSign = "\x24" // $, Unicode scalar U+0024
let blackHeart = "\u2665" // ?, Unicode scalar U+2665
let sparklingHeart = "\U0001F496" // ????, Unicode scalar U+1F496
初始化空字符串
為了構(gòu)造一個很長的字符串,可以創(chuàng)建一個空字符串作為初始值??梢詫⒖盏淖址置媪抠x值給變量,也可以初始化一個新的 String 實例:
var emptyString = "" // empty string literal
var anotherEmptyString = String() // initializer syntax
// 這兩個字符串都為空,并且兩者等價
您可以通過檢查其 Boolean 類型的 isEmpty 屬性來判斷該字符串是否為空:
if emptyString.isEmpty {
println("Nothing to see here")
}
// 打印 "Nothing to see here"
字符串可變性
您可以通過將一個特定字符串分配給一個變量(對其進行修改)或者常量(保證其不會被修改)來指定該字符串是否可以被修改:
var variableString = "Horse"
variableString += " and carriage"
// variableString 現(xiàn)在為 "Horse and carriage"
let constantString = "Highlander"
constantString += " and another Highlander"
// 這會報告一個編譯錯誤(compile-time error) - 常量不可以被修改。
字符串是值類型
Swift 的 String 類型是值類型。如果您創(chuàng)建了一個新的字符串值,那么當(dāng)其進行常量、變量賦值操作或在函數(shù)/方法中傳遞時,會進行值拷貝。在不同情況下,都會對已有字符串值創(chuàng)建新副本,并對該新副本進行傳遞或賦值。
連接字符串和字符
字符串和字符的值可以通過加法運算符 (+) 相加在一起并創(chuàng)建一個新的字符串值:
let string1 = "hello"
let string2 = " there"
let character1: Character = "!"
let character2: Character = "?"
let stringPlusCharacter = string1 + character1 // 等于 "hello!"
let stringPlusString = string1 + string2 // 等于 "hello there"
let characterPlusString = character1 + string1 // 等于 "!hello"
let characterPlusCharacter = character1 + character2 // 等于 "!?"
您也可以通過加法賦值運算符 (+=) 將一個字符串或者字符添加到一個已經(jīng)存在字符串變量上:
var instruction = "look over"
instruction += string2
// instruction 現(xiàn)在等于 "look over there"
var welcome = "good morning"
welcome += character1
// welcome 現(xiàn)在等于 "good morning!"
注意:您不能將一個字符串或者字符添加到一個已經(jīng)存在的字符變量上,因為字符變量只能包含一個字符。
比較字符串
Swift 提供了三種方式來比較字符串的值:字符串相等,前綴相等和后綴相等。
字符串相等
如果兩個字符串以同一順序包含完全相同的字符,則認(rèn)為兩者字符串相等:
let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
println("These two strings are considered equal")
}
// prints "These two strings are considered equal"
前綴/后綴相等
通過調(diào)用字符串的 hasPrefix/hasSuffix 方法來檢查字符串是否擁有特定前綴/后綴。兩個方法均需要以字符串作為參數(shù)傳入并返回 Boolean 值。兩個方法均執(zhí)行基本字符串和前綴/后綴字符串之間逐個字符的比較操作。
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion",
"Act 1 Scene 3: A room in Capulet's mansion",
"Act 1 Scene 4: A street outside Capulet's mansion",
"Act 1 Scene 5: The Great Hall in Capulet's mansion",
"Act 2 Scene 1: Outside Capulet's mansion",
"Act 2 Scene 2: Capulet's orchard",
"Act 2 Scene 3: Outside Friar Lawrence's cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet's mansion",
"Act 2 Scene 6: Friar Lawrence's cell"
]
//您可以利用 hasPrefix 方法使用romeoAndJuliet數(shù)組來計算話劇中第一幕的場景數(shù):
var act1SceneCount = 0
for scene in romeoAndJuliet {
if scene.hasPrefix("Act 1 ") {
++act1SceneCount
}
}
println("There are \(act1SceneCount) scenes in Act 1")
// prints "There are 5 scenes in Act 1"
//同樣,可使用hasSuffix方法來計算發(fā)生在Capulet公館和Lawrence牢房內(nèi)以及周圍的場景數(shù)。
var mansionCount = 0
var cellCount = 0
for scene in romeoAndJuliet {
if scene.hasSuffix("Capulet's mansion") {
++mansionCount
} else if scene.hasSuffix("Friar Lawrence's cell") {
++cellCount
}
}
println("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
// prints "6 mansion scenes; 2 cell scenes"
大寫和小寫字符串
您可以通過字符串的 uppercaseString 和 lowercaseString 屬性來訪問一個字符串的大寫/小寫版本。
let normal = "Could you help me, please?"
let shouty = normal.uppercaseString
// shouty 值為 "COULD YOU HELP ME, PLEASE?"
let whispered = normal.lowercaseString
// whispered 值為 "could you help me, please?"