Swift学习笔记基础语法-字符串与字符
1.初始化空字符串
var emptyStr1 = ""
var emptyStr2 = String()
if emptyStr1.isEmpty{
print("empty string") //empty string
}
if emptyStr2.isEmpty{
print("empty string2") //empty string2
}
1
2
3
4
5
6
7
8
9
2.字符串的可变性
/**
* var 定义的字符串可以修改
*/
emptyStr2 += "hello"
print(emptyStr1)
/**
* let 使一个字符串不被修改
*/
//下面用法是错的
let constString = "can't be modified"
constString += "true"
1
2
3
4
5
6
7
8
9
10
11
12
3.字符串的值类型
Swift 的String类型是值类型。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。
注意:
与 Cocoa 中的NSString不同,当您在 Cocoa 中创建了一个NSString实例,并将其传递给一个函数/方法,或者赋值给一个变量,您传递或赋值的是该NSString实例的一个引用,除非您特别要求进行值拷贝,否则字符串不会生成新的副本来进行赋值操作。
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值。 很明显无论该值来自于哪里,都是您独自拥有的。 您可以确信传递的字符串不会被修改,除非你自己去修改它。
在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您将字符串作为值类型的同时可以获得极高的性能。
1
2
3
4
5
6
7
4.字符的使用
//定义字符常量或变量
let testCharacter : Character = "@"
//字符数组初始化字符串
let stringCharacters : [Character] = ["s","t","r","i","n","g"]
let aString = String(stringCharacters)
print(aString)
//使用字符
for c in emptyStr2.characters{
print(c)
}
/*
输出
h
e
l
l
o
*/
//计算字符数量
let totalString = "This is a total String LOL "
print("totalString has \(totalString.characters.count) characters")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
5.字符串的使用
//字符串索引
var computer = "MacBook Air!"
computer[computer.startIndex] // M
computer[computer.endIndex.predecessor()] // !
computer[computer.startIndex.successor()] // a
let index = computer.startIndex.advancedBy(3)
computer[index] // B
//索引越界会运行时报错
computer.endIndex.successor() //fatal error: can not increment endIndex
//字符串插入
//method 1
computer.insert("!", atIndex: computer.endIndex)
//method 2
computer.insertContentsOf("is very good".characters, at: computer.endIndex.predecessor())
print(computer)
//字符串删除
//method 1
computer.removeAtIndex(computer.endIndex.predecessor())
//method 2 指定索引删除范围内的每个字符
let range = computer.endIndex.advancedBy(-5)..