1.字符串的初始化
//初始化一個空字符串
let str = ""
let str1 = String()
//直接
let swift = "swift"
//通過character數組
//ps: String可以和character數組互相轉換 eg.swift.characters
let swiftInChar:[Character] = ["S","w","i","f","t"]
let swift2 = String(swiftInChar)
//通過反斜杠組建
//注意: 反斜杠的括號內不能有 '\' '回車' 等
let name = "六道"
let swift3 = "hellow \(name)"
2.unicode
swift中可以通過一個unicode編碼來初始化一個字符串
let e = "\u{e9}" //é
let e1 = "\u{65}\u{301}" //é
let e3 = e1 + "\u{20DD}" //é? :這里是有個圓圈包裹著,markdown顯示不出來
3.字符串是值類型
與OC中不同,這里的字符串是一個值類型,意思是當一個字符串作為一個函數的參數時,其值會被拷貝。函數內的變化永遠不會影響到該字符串本身。
4.遍歷字符串
var test = "你好 swift"
//方式一
for t in test.characters{
print(t)
}
//方式二
test.characters.forEach { (c) in
print(c)
}
//方式三,這種方式可以得到遍歷過程中的索引
for index in test.characters.indices{
print("\(index) \(test[index])")
}
4.字符串中的索引
每一個字符串都是由一個或多個字符組成,每一個字符由一個或者多個Unicode標量組成。所以每個字符串本質上都是由Unicode標量序列組成。
(1) characters.count和.endIndex的值并不總是相等
let e = "\u{65}\u{301}" //é
e.endIndex //2
e.characters.count //1
(2) 索引:指向字符串中的某個字符的第一個Unicode標量所在的位置。類型為String.index
//如(1)中所示常量e由兩個unicode組成,而它的字符的數量卻為1
//再舉例說明
let e1 = "\u{65}\u{301}"
let e3 = e1 + "n" + e1 + "n"
e3.endIndex //6
e3.endIndex.predecessor() //5
e3.endIndex.predecessor().predecessor() //3
e3.endIndex.predecessor().predecessor().predecessor() //2
e3.endIndex.predecessor().predecessor().predecessor().predecessor()//0
e3.characters.count //4
(3)索引的相關操作
index.predecessor() //獲取上一個索引
index.successor() //獲取下一個索引
index.advancedBy(i) //獲取第下i個索引
e3.startIndex.distanceTo(end: String.CharacterView.Index) //距離某個index有多少個單位
5.字符串中插入和刪除
Paste_Image.png
6.字符串判等
當字符串中的unicode標量值一致且順序一樣才會相等
6E631297-2C3A-44CD-A36B-245AD2B01048.png
7.前綴和后綴
CF930DBF-9561-466B-809F-D51B0A6A4E1B.png