Swift 的 String 类型与 Foundation NSString 类进行了无缝桥接。如果您利用 Cocoa 或 Cocoa Touch 中的 Foundation 框架进行工作,整个 NSString API 都可以调用您创建的任意 String 类型的值,除了本章介绍的String特性。您也可以在任意要求传入NSString 实例作为参数的 API 中使用 String 类型的值进行替换。
1.创建空字符串
var emptyString = ""
var anotherEmptyString = String()
这两者是等价的,就是说 emptyString== anotherEmptyString。
判断字符串是否为空
if emptyString.isEmpty{
println("Nothing to see here.")
}
2.字符串的可变性
在Swift中可以通过将字符串赋值给一个常量或者变量来标示字符串可不可以修改。
注意:在 Objective-C 和 Cocoa 中,您通过选择两个不同的类( NSString 和 NSMutableString )来指定该字符串是否可以被修改,Swift中的字符串是否可以修改仅通过定义的是变量还是常量来决定,实现了多种类型可变性操作的统一。
var variableString = "Horse" //可变类型
variableString += " and carriage"
let constantString = "Highlander" //不可变类型
//constantString += " and another Highlander." //编译错误
3.字符串是值类型
Swift 的 String 类型是值类型。如果您创建了一个新的字符串值,那么当其进行常量、变量赋值操作或在函数/方法中传递时,会进行值拷贝。在不同情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值。
注意:和Cocoa 中的 NSString 不同,当您在 Cocoa 中创建了一个 NSString 实例,并将其传递给一个函数/方法,或者赋给一个变量,您永远都是传递或赋值同一个 NSString 实例的一个引用。除非您特别要求其进行值拷贝,否则字符串不会进行赋值新副本操作。
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值,其明确您独有该字符串的值,无论它来自哪里。您可以放心您传递的字符串本身不会被更改,除非是你自己更改它。
在实际编译时,Swift编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您始终可以将字符串作为值类型的同时获得极高的性能。
4.和字符一起使用
Swift中的String类型是特定序列的字符的集合。你可以用for-in循环来遍历字符串中的每一个字符:
for character in "Dog!
println(character) //要看到输出结果,点击眼睛右边的加号即可
}
5.字符的初始化
通过为标明为Character类型的常量或者变量赋一个只有一个字符的值的方式来为字符初始化赋值。
let yenSign:Character = "¥"
6.连接字符串和字符
字符串可以通过加法运算符+连接成一个新的字符串。
//+
let string1 = "hello"
let string2 = " there"
let char1:Character = "!"
var welcome = string1 + string2
var welcome1 = string1 + string2 + String(char1)//可以通过类型转换的方式。但是不能直接拼接Character
你也可以通过+=将一个字符串拼接到一个已经存在的字符串后面。
//+=
welcome += string2
你可以通过append方法将字符拼接到字符串后面。
//append
welcome.append(char1)
注意:苹果最开始允许+和+=来在字符串后面拼接字符,现在不允许了,改为append方法了!
7.字符串插值
字符串插值是一种全新的构建字符串的方式,可以在其中包含常量、变量、字面量和表达式。您插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中:
let multiplier = 3
var yenUnit:Character = "$"
let message = "\(multiplier) times 2.5 is \(Double(multiplier)*2.5) \(yenUnit)"
注意:您插值字符串中写在括号中的表达式不能包含非转义双引号 (") 和反斜杠 (\),并且不能包含回车或换行符。
8.计算字符串的字符数量
Swift 的字符串和字符类型是完全兼容 Unicode 的。
通过调用全局 countElements 函数,并将字符串作为参数进行传递可以获取该字符串的字符数量。
let unusualMenagerice = "Dog
1.创建空字符串
var emptyString = ""
var anotherEmptyString = String()
这两者是等价的,就是说 emptyString== anotherEmptyString。
判断字符串是否为空
if emptyString.isEmpty{
println("Nothing to see here.")
}
2.字符串的可变性
在Swift中可以通过将字符串赋值给一个常量或者变量来标示字符串可不可以修改。
注意:在 Objective-C 和 Cocoa 中,您通过选择两个不同的类( NSString 和 NSMutableString )来指定该字符串是否可以被修改,Swift中的字符串是否可以修改仅通过定义的是变量还是常量来决定,实现了多种类型可变性操作的统一。
var variableString = "Horse" //可变类型
variableString += " and carriage"
let constantString = "Highlander" //不可变类型
//constantString += " and another Highlander." //编译错误
3.字符串是值类型
Swift 的 String 类型是值类型。如果您创建了一个新的字符串值,那么当其进行常量、变量赋值操作或在函数/方法中传递时,会进行值拷贝。在不同情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值。
注意:和Cocoa 中的 NSString 不同,当您在 Cocoa 中创建了一个 NSString 实例,并将其传递给一个函数/方法,或者赋给一个变量,您永远都是传递或赋值同一个 NSString 实例的一个引用。除非您特别要求其进行值拷贝,否则字符串不会进行赋值新副本操作。
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值,其明确您独有该字符串的值,无论它来自哪里。您可以放心您传递的字符串本身不会被更改,除非是你自己更改它。
在实际编译时,Swift编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您始终可以将字符串作为值类型的同时获得极高的性能。
4.和字符一起使用
Swift中的String类型是特定序列的字符的集合。你可以用for-in循环来遍历字符串中的每一个字符:
for character in "Dog!
println(character) //要看到输出结果,点击眼睛右边的加号即可
}
5.字符的初始化
通过为标明为Character类型的常量或者变量赋一个只有一个字符的值的方式来为字符初始化赋值。
let yenSign:Character = "¥"
6.连接字符串和字符
字符串可以通过加法运算符+连接成一个新的字符串。
//+
let string1 = "hello"
let string2 = " there"
let char1:Character = "!"
var welcome = string1 + string2
var welcome1 = string1 + string2 + String(char1)//可以通过类型转换的方式。但是不能直接拼接Character
你也可以通过+=将一个字符串拼接到一个已经存在的字符串后面。
//+=
welcome += string2
你可以通过append方法将字符拼接到字符串后面。
//append
welcome.append(char1)
注意:苹果最开始允许+和+=来在字符串后面拼接字符,现在不允许了,改为append方法了!
7.字符串插值
字符串插值是一种全新的构建字符串的方式,可以在其中包含常量、变量、字面量和表达式。您插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中:
let multiplier = 3
var yenUnit:Character = "$"
let message = "\(multiplier) times 2.5 is \(Double(multiplier)*2.5) \(yenUnit)"
注意:您插值字符串中写在括号中的表达式不能包含非转义双引号 (") 和反斜杠 (\),并且不能包含回车或换行符。
8.计算字符串的字符数量
Swift 的字符串和字符类型是完全兼容 Unicode 的。
通过调用全局 countElements 函数,并将字符串作为参数进行传递可以获取该字符串的字符数量。
let unusualMenagerice = "Dog