swift远征~字符串
swift中字符串就是字符的集合,字符串类型在swift下写做String, 字符类型写做Character,与OC中的NSString最大的不同在于,String的本质是一个结构体类型而并非类类型。
字符类型
在swift中字符与字符串的字面量都是用双引号包裹的,因此只有显示声明为Character的变量才被认为是字符类型。
let char : Character = "c"
let str3 = "c"
使用Unicode编码
swift中的字符与字符串都是由Unicode编码的,这意味着在swift中单个的字符无论是英文字母还是汉字还是Unicode表情都只占用一个字符长度,并且可以使用转义符号加Unicode编码直接为字符或字符串赋值。
let uc = "\u{1f60e}" // uc:"😎"
扩展字形簇(extended grapheme cluster)
不仅是简单的使用Unicode编码,swift中的每一个字符准确的来说是一个扩展字形簇,它的意思是人类可识别的单个字符,比方说一个带有注音符的字符,在Unicode编码中实际上是两个字符,但在swift中被认为是一个字符。
let a = "\u{0061}\u{0301}" // "á"
a.count // 1
并且,在判断字符等价时,也是以扩展字形簇为基准来进行判断的
let b = "\u{00E1}" // "á"
a == b // true
创建一个字符串
字面量方法
let str : String = "It's a string"
字符串判空
str.isEmpty
isEmpty是一个Bool类型的字符串属性
获取字符串长度
str.count
count是一个Int类型的字符串属性
字符串拼接
使用+运算符
var str1 = "1+1="
str1 += "2"
使用append函数
var str1 = "1+1="
str1.append("2")
结果与上等同,append函数可以传入Character和String类型。
字符串遍历
使用遍历集合的方式
for c in str {
print(c)
}
此处c为Character类型。
索引字符串
由于扩展字形簇的特性,要索引swift中的字符串相较其他语言就要麻烦一些。
let start = str.startIndex //获取首字符索引
let end = str.index(start, offsetBy: 3) //获取第四个字符的索引
let c4 = str[end] //"s"
截取字符串
同样的,截取字符串也稍显复杂
let subindex = str.index(str.startIndex, offsetBy: 5) //获取第五个字符的索引
let c4 = str[subindex..<str.endIndex] //"a string"