1.初始化空字符串
var emptyStr1 = ""
var emptyStr2 = String()
if emptyStr1.isEmpty{
print("empty string") //empty string
}
if emptyStr2.isEmpty{
print("empty string2") //empty string2
}
2.字符串的可变性
/**
* var 定义的字符串可以修改
*/
emptyStr2 += "hello"
print(emptyStr1)
/**
* let 使一个字符串不被修改
*/
//下面用法是错的
let constString = "can't be modified"
constString += "true"
3.字符串的值类型
Swift 的String类型是值类型。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。
注意:
与 Cocoa 中的NSString不同,当您在 Cocoa 中创建了一个NSString实例,并将其传递给一个函数/方法,或者赋值给一个变量,您传递或赋值的是该NSString实例的一个引用,除非您特别要求进行值拷贝,否则字符串不会生成新的副本来进行赋值操作。
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值。 很明显无论该值来自于哪里,都是您独自拥有的。 您可以确信传递的字符串不会被修改,除非你自己去修改它。
在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您将字符串作为值类型的同时可以获得极高的性能。
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")
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)..<computer.endIndex
computer.removeRange(range) // MacBook Air!is very
//字符串比较
//字符串相等
let equalString1 = "good day"
let equalString2 = "good day"
if equalString1 == equalString2{
print("same")
}
//前缀相同
let name = ["张三1","张三2","张三3","李四1","李四2"];
var 姓张的 = 0;
for nameWithZhang in name{
if nameWithZhang.hasPrefix("张"){
++姓张的
}
}
print("姓张的有\(姓张的)人") //姓张的有3人
//后缀相同
var 结尾是1的 = 0
for nameSuffix1 in name{
if nameSuffix1.hasSuffix("1"){
++结尾是1的
}
}
print("结尾是1的有\(结尾是1的)人")