字符串
- 声明字符串的两种方式:
var str:String = "Hello, playground"
let str2 = String("Hello, playground")
- 空字符串:
var emptyString = ""
var emptyString2 = String()
//判断一个字符串是否为空
emptyString.isEmpty
- 拼接字符串
str + mark //不改变原字符串
str += mark //改变原字符串
Character和Unicode
- 遍历字符串中的每个字符
//这里的c是 Character 类型
for c in str.characters {
print(c)
}
- 声明一个 Character 类型的变量
let mark1 = "!" //这里mark是String类型
let mark2:Character = "!"
注意:Swift里面字符也是用双引号表示的,区分字符和字符串的关键是要显示的声明类型。
- 字符串与字符的拼接
mark1 + String(mark2) //需要强制转换
或者
mark1.append(mark2)
Swift语言中字符串的优势
- Swift中无论字符还是字符串都是基于Unicode码的
let englishLetter:Character = "a"
let chineseLetter:Character = "安"
let dog:Character = "🐶"
let coolGuy:Character = "\u{1F60E}"
//这样Swift在判断字符串的时候会更加精准
var cafe = "café"
var cafe2 = "cafe\u{0301
cafe == cafe2
cafe.characters.count == cafe2.characters.count
let s4 = "🐶🐶🐶"
let s5:NSString = "🐶🐶🐶"
s4.characters.count //3
s5.length //6
String.Index和Range
- 由于Swift的字符串是基于Unicode的,所以不能通过方括号的方式去取字符串里的字符。
//以下两种方式都是错误的
str[0]
str.characters[0]
- Swift为我们提供了一个新的类型专门用于字符串的索引:String.Index:
var str: String = "Hello, playground"
let startIndex = str.startIndex
startIndex //这里的startIndex是Index类型
str[startIndex]
str[startIndex.advancedBy(5)]
str[spaceIndex.predecessor()] //当前索引的前一个索引
str[spaceIndex.successor()] //当前索引的后一个索引
let endIndex = str.endIndex //这里的最后一个索引是字符串最后一个字符的下一个位置
//[startIndex , endIndex) 这是一个前闭后开的区间
str[endIndex.predecessor()]
- 可以使用区间运算符放在两个索引之间
str[startIndex..<spaceIndex]
let range = startIndex..<spaceIndex //这里产生一个新类型,range
str.replaceRange(range, with: "Hi")
str.removeRange(str.endIndex.advancedBy(-2)..<str.endIndex)
as 和 NSString
- String和NSString类型转换:
var s2: String = NSString(format: "123") as String
var s3 = "123" as NSString
as充当的是结构体或者类的强制类型转换,后续会做详细介绍。
如果所处理的字符串有大量的中文或者表情,用String是很方便的。如果处理英文,NSString很方便。
去掉字符串中的冗余信息
let s6 = " ---Hello-- " as NSString
s6.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:" -"))