Swift語法總結(jié)-字符串和字符

1.序言

Swift 的String 和Character 類型提供了快速和兼容 Unicode 的方式供你的代碼使用。你也可以在字符串內(nèi)插過程中使用字符串插入常量、變量、字面量表達(dá)成更長的字符串,這樣可以很容易的創(chuàng)建自定義的字符串值,進(jìn)行展示、存儲以及打印。

注意:Swift 的String 類型與 Foundation NSString 類進(jìn)行了無縫橋。
Foundation 也可以對String 進(jìn)行擴(kuò)展,暴露在NSString 中定義的方法。 這意味著,如果你在String 中調(diào)用這些NSString 的方法,將不用進(jìn)行轉(zhuǎn)換。
2.初始化空字符串

要創(chuàng)建一個空字符串作為初始值,可以將空的字符串字面量賦值給變量,也可以初始化一個新的String 實例:

var emptyString = "" // 空字符串字面量
var anotherEmptyString = String() // 初始化方法
// 兩個字符串均為空并等價。
2.1字符串可變性

您可以通過將一個特定字符串分配給一個變量來對其進(jìn)行修改,或者分配給一個常量來保證其不會被修改:

2.2字符串是值類型

Swift 的String 類型是值類型。 如果您創(chuàng)建了一個新的字符串,那么當(dāng)其進(jìn)行常量、變量賦值操作,或在函數(shù)/方法中傳遞時,會進(jìn)行值拷貝。 任何情況下,都會對已有字符串值創(chuàng)建新副本,并對該新副本進(jìn)行傳遞或賦值操作。

注意:Swift 默認(rèn)字符串拷貝的方式保證了在函數(shù)/方法中傳遞的是字符串的值。 很明顯無論該值來自于哪里,都是您
獨(dú)自擁有的。 您可以確信傳遞的字符串不會被修改,除非你自己去修改它。
2.3連接字符串和字符

字符串可以通過加法運(yùn)算符( + )相加在一起(或稱“連接”)創(chuàng)建一個新的字符串:

let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome 現(xiàn)在等于 "hello there"

您也可以通過加法賦值運(yùn)算符 ( += ) 將一個字符串添加到一個已經(jīng)存在字符串變量上:

var instruction = "look over"
instruction += string2
// instruction 現(xiàn)在等于 "look over there"

您可以用append() 方法將一個字符附加到一個字符串變量的尾部:

let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome 現(xiàn)在等于 "hello there!"
注意:
您不能將一個字符串或者字符添加到一個已經(jīng)存在的字符變量上,因為字符變量只能包含一個字符。
2.4字符串插值

字符串插值是一種構(gòu)建新字符串的方式,可以在其中包含常量、變量、字面量和表達(dá)式。 您插入的字符串字面量的每一項都在以反斜線為前綴的圓括號中

注意:
插值字符串中寫在括號中的表達(dá)式不能包含非轉(zhuǎn)義反斜杠 ( \ ),并且不能包含回車或換行符。不過,插值字符串可以包含其他字面量。
注意:
可擴(kuò)展的字符群集可以組成一個或者多個 Unicode 標(biāo)量。這意味著不同的字符以及相同字符的不同表示方式可需要不同數(shù)量的內(nèi)存空間來存儲。所以 Swift 中的字符在一個字符串中并不一定占用相同的內(nèi)存空間數(shù)
量。因此在沒有獲取字符串的可擴(kuò)展的字符群的范圍時候,就不能計算出字符串的字符數(shù)量。如果您正在處理一個長字符串,需要注意characters 屬性必須遍歷全部的 Unicode 標(biāo)量,來確定字符串的字符數(shù)量。

另外需要注意的是通過characters 屬性返回的字符數(shù)量并不總是與包含相同字符的NSString 的length 屬性相同。NSString 的length 屬性是利用 UTF-16 表示的十六位代碼單元數(shù)字,而不是 Unicode 可擴(kuò)展的字符群
集。作為佐證,當(dāng)一個NSString 的length 屬性被一個Swift的String 值訪問時,實際上是調(diào)用了utf16Count 。
2.5訪問和修改字符串
2.5.1訪問和修改字符串

你可以通過字符串的屬性和方法來訪問和修改它,當(dāng)然也可以用下標(biāo)語法完成。

字符串索引
每一個String 值都有一個關(guān)聯(lián)的索引(index)類型, String.Index ,它對應(yīng)著字符串中的每一個Character 的位置。

2.5.2插入和刪除

調(diào)用insert(_:at:) 方法可以在一個字符串的指定索引插入一個字符,調(diào)用insert(contentsOf:at:) 方法可以在一個字符串的指定索引插入一個段字符串。

var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// welcome 變量現(xiàn)在等于 "hello!"
welcome.insert(contentsOf:" there".characters, at: welcome.index(before: welcome.endIndex))
// welcome 變量現(xiàn)在等于 "hello there!"

調(diào)用remove(at:) 方法可以在一個字符串的指定索引刪除一個字符,調(diào)用removeSubrange(_:) 方法可以在一個字符串的指定索引刪除一個子字符串。

welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome 現(xiàn)在等于 "hello there"
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome 現(xiàn)在等于 "hello"
2.5比較字符串

字符串/字符相等

et quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
print("These two strings are considered equal")
}
// 打印輸出 "These two strings are considered equal"

前綴/后綴相等

通過調(diào)用字符串的hasPrefix(_:) / hasSuffix(_:) 方法來檢查字符串是否擁有特定前綴/后綴,兩個方法均接收一個String 類型的參數(shù),并返回一個布爾值。
注意:
hasPrefix(_:) 和hasSuffix(_:) 方法都是在每個字符串中逐字符比較其可擴(kuò)展的字符群集是否標(biāo)準(zhǔn)相等。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容