3.字符串和字符
String是例如"hello, world","albatross"这样的有序的字符类型的值的集合。通过String类型来表示。 一个String的内容可以用许多方式读取,它包括一个字符值的集合。
1.字符串字面量
- 字符串字面量是由双引号 (
""
) 包裹着的具有固定顺序的文本字符集。
let someString = "Some string literal value";
2.初始化空字符串
var emptyString = ""; // 空字符串字面量 var anotherEmptyString = String(); // 初始化方法 if emptyString == anotherEmptyString { print("\(emptyString.isEmpty)"); //结果为true }
3.字符串可变性
- 可以通过将一个特定字符串分配给一个变量来对其进行修改,或者分配给一个常量来保证其不会被修改
var variableString = "Horse"; variableString += " and carriage";
4.字符串是值类型
- Swift 的String类型是值类型。 如果创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。
- 在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着将字符串作为值类型的同时可以获得极高的性能。
5.使用字符
//通过for-in循环来遍历字符串中的characters属性来获取每一个字符的值 for character in "Dog!".characters { print(character); } //通过传递一个值类型为Character的数组作为自变量来初始化: let catCharacters: [Character] = ["C", "a", "t", "!"]; let catString = String(catCharacters); print(catString);
6.比较字符串
//字符串/字符可以用等于操作符(==)和不等于操作符(!=)比较: let quotation = "We're a lot alike, you and I."; let sameQuotation = "We're a lot alike, you and I."; if quotation == sameQuotation { print("These two strings are considered equal"); } //通过调用字符串的hasPrefix(_:)/hasSuffix(_:)方法来检查字符串是否拥有特定前缀/后缀,两个方法均接收一个String类型的参数,并返回一个布尔值。 let romeoAndJuliet = "Act 1 Scene 1: Verona, A public place"; romeoAndJuliet.hasPrefix("Act 1");
7.访问和修改字符串
- 字符串索引:每一个
String
值都有一个关联的索引(index)类型,String.Index
,它对应着字符串中的每一个Character
的位置。使用startIndex
属性可以获取一个String
的第一个Character
的索引。使用endIndex
属性可以获取最后一个Character
的后一个位置的索引。 - 调用
insert(_:atIndex:)
方法可以在一个字符串的指定索引插入一个字符。 - 调用
insertContentsOf(_:at:)
方法可以在一个字符串的指定索引插入一个字符串。 - 调用
removeAtIndex(_:)
方法可以在一个字符串的指定索引删除一个字符。 - 调用
removeRange(_:)
方法可以在一个字符串的指定索引删除一个子字符串。
var greeting = "Guten Tag!"; greeting[greeting.startIndex]; //G let index = greeting.startIndex.advancedBy(2); greeting[index]; //t greeting.insert("!", atIndex: greeting.endIndex); //"Guten Tag!!" greeting.insertContentsOf(" Come".characters, at: greeting.endIndex.predecessor()); //"Guten Tag! Come!" greeting.removeAtIndex(greeting.endIndex.predecessor()); //"!"
无善无恶心之体,
有善有恶意之动,
知善知恶是良知,
为善去恶是格物。