Swift傻傻分不清楚系列(五) 字符串和字符
本頁包含內容:
- 字符串字面量
- 初始化空字符串
- 字符串可變性
- 字符串是值類型
- 使用字符
- 連接字符串和字符
- 字符串插值
- Unicode
- 計算字符數量
- 訪問和修改字符串
- 比較字符串
- 字符串的 Unicode 表示形式
String是例如"hello, world","albatross"這樣的有序的Character(字符)類型的值的集合。通過String類型來表示。 一個String的內容可以用許多方式讀取,它包括一個Character值的集合。
創建和操作字符串的語法與 C 語言中字符串操作相似,輕量并且易讀。 字符串連接操作只需要簡單地通過+符號將兩個字符串相連即可。與 Swift 中其他值一樣,能否更改字符串的值,取決于其被定義為常量還是變量。你也可以在字符串內插過程中使用字符串插入常量、變量、字面量表達成更長的字符串,這樣可以很容易的創建自定義的字符串值,進行展示、存儲以及打印。
盡管語法簡易,但String類型是一種快速、現代化的字符串實現。 每一個字符串都是由編碼無關的 Unicode 字符組成,并支持訪問字符的多種 Unicode 表示形式(representations)。
注意:
Swift 的String類型與 Foundation?NSString類進行了無縫橋接。就像?AnyObject類型?中提到的一樣,在使用 Cocoa 中的 Foundation 框架時,您可以將創建的任何字符串的值轉換成NSString,并調用任意的NSString?API。您也可以在任意要求傳入NSString實例作為參數的 API 中用String類型的值代替。 更多關于在 Foundation 和 Cocoa 中使用String的信息請查看?<a rel="nofollow" href="https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/index.html#//apple_ref/doc/uid/TP40014216" "="" style="box-sizing: border-box; color: rgb(45, 133, 202); text-decoration: none; background-color: transparent;">Using Swift with Cocoa and Objective-C (Swift 2.1)。
字符串字面量(String Literals)
您可以在您的代碼中包含一段預定義的字符串值作為字符串字面量。字符串字面量是由雙引號 ("") 包裹著的具有固定順序的文本字符集。 字符串字面量可以用于為常量和變量提供初始值:
let someString = "Some string literal value"注意someString常量通過字符串字面量進行初始化,Swift 會推斷該常量為String類型。
初始化空字符串 (Initializing an Empty String)
要創建一個空字符串作為初始值,可以將空的字符串字面量賦值給變量,也可以初始化一個新的String實例:
var emptyString = "" // 空字符串字面量 var anotherEmptyString = String() // 初始化方法 // 兩個字符串均為空并等價。您可以通過檢查其Bool類型的isEmpty屬性來判斷該字符串是否為空:
if emptyString.isEmpty {print("Nothing to see here") } // 打印輸出:"Nothing to see here"字符串可變性 (String Mutability)
您可以通過將一個特定字符串分配給一個變量來對其進行修改,或者分配給一個常量來保證其不會被修改:
var variableString = "Horse" variableString += " and carriage" // variableString 現在為 "Horse and carriage"let constantString = "Highlander" constantString += " and another Highlander" // 這會報告一個編譯錯誤 (compile-time error) - 常量字符串不可以被修改。注意: 在 Objective-C 和 Cocoa 中,您需要通過選擇兩個不同的類(NSString和NSMutableString)來指定字符串是否可以被修改。
字符串是值類型(Strings Are Value Types)
Swift 的String類型是值類型。 如果您創建了一個新的字符串,那么當其進行常量、變量賦值操作,或在函數/方法中傳遞時,會進行值拷貝。 任何情況下,都會對已有字符串值創建新副本,并對該新副本進行傳遞或賦值操作。
Swift 默認字符串拷貝的方式保證了在函數/方法中傳遞的是字符串的值。 很明顯無論該值來自于哪里,都是您獨自擁有的。 您可以確信傳遞的字符串不會被修改,除非你自己去修改它。
在實際編譯時,Swift 編譯器會優化字符串的使用,使實際的復制只發生在絕對必要的情況下,這意味著您將字符串作為值類型的同時可以獲得極高的性能。
使用字符(Working with Characters)
您可通過for-in循環來遍歷字符串中的characters屬性來獲取每一個字符的值:
for character in "Dog!".characters {print(character) } // D // o // g // !另外,通過標明一個Character類型并用字符字面量進行賦值,可以建立一個獨立的字符常量或變量:
let exclamationMark: Character = "!"字符串可以通過傳遞一個值類型為Character的數組作為自變量來初始化:
let catCharacters: [Character] = ["C", "a", "t", "!"] let catString = String(catCharacters) print(catString) // 打印輸出:"Cat!"連接字符串和字符 (Concatenating Strings and Characters)
字符串可以通過加法運算符(+)相加在一起(或稱“連接”)創建一個新的字符串:
let string1 = "hello" let string2 = " there" var welcome = string1 + string2 // welcome 現在等于 "hello there"您也可以通過加法賦值運算符 (+=) 將一個字符串添加到一個已經存在字符串變量上:
var instruction = "look over" instruction += string2 // instruction 現在等于 "look over there"您可以用append()方法將一個字符附加到一個字符串變量的尾部:
let exclamationMark: Character = "!" welcome.append(exclamationMark) // welcome 現在等于 "hello there!"注意: 您不能將一個字符串或者字符添加到一個已經存在的字符變量上,因為字符變量只能包含一個字符。
字符串插值 (String Interpolation)
字符串插值是一種構建新字符串的方式,可以在其中包含常量、變量、字面量和表達式。 您插入的字符串字面量的每一項都在以反斜線為前綴的圓括號中:
let multiplier = 3 let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)" // message is "3 times 2.5 is 7.5"在上面的例子中,multiplier作為\(multiplier)被插入到一個字符串常量量中。 當創建字符串執行插值計算時此占位符會被替換為multiplier實際的值。
multiplier的值也作為字符串中后面表達式的一部分。 該表達式計算Double(multiplier) * 2.5的值并將結果 (7.5) 插入到字符串中。 在這個例子中,表達式寫為\(Double(multiplier) * 2.5)并包含在字符串字面量中。
注意:
插值字符串中寫在括號中的表達式不能包含非轉義反斜杠 (\),并且不能包含回車或換行符。不過,插值字符串可以包含其他字面量。
Unicode
Unicode 是一個國際標準,用于文本的編碼和表示。 它使您可以用標準格式表示來自任意語言幾乎所有的字符,并能夠對文本文件或網頁這樣的外部資源中的字符進行讀寫操作。 Swift 的String和Character類型是完全兼容 Unicode 標準的。
Unicode 標量(Unicode Scalars)
Swift 的String類型是基于?Unicode 標量?建立的。 Unicode 標量是對應字符或者修飾符的唯一的21位數字,例如U+0061表示小寫的拉丁字母(LATIN SMALL LETTER A)("a"),U+1F425表示小雞表情(FRONT-FACING BABY CHICK) ("
總結
以上是生活随笔為你收集整理的Swift傻傻分不清楚系列(五) 字符串和字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift傻傻分不清楚系列(四)基本运算
- 下一篇: Swift傻傻分不清楚系列(六)集合类型