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.字符串中插入和删除
6.字符串判等
当字符串中的unicode标量值一致且顺序一样才会相等
7.前缀和后缀