首页 > 代码库 > Welcome to Swift (苹果官方Swift文档初译与注解十八)---116~122页(第二章)
Welcome to Swift (苹果官方Swift文档初译与注解十八)---116~122页(第二章)
Strings and Characters (字符串和字符)
字符串是一组字符组成的序列,例如“hello, world" 或 "albatross”.在Swift中,字符串使用String类型进行声明,它代表一组由Character(字符)类型组成的值的序列.
String类型和Character类型提供了一种在代码中处理 (兼容Unicode) 文本的快速方式.字符串创建和管理的语法与C语言的相似,都属于轻量级并且可读性好.字符串的拼接只是简单的 使用加号(+)操作符,而且字符串的变化部分可以根据常量或者变量来选择处理.
尽管语法简易,但Swift的String类型还是提供了现代的,快速的关于字符的处理工作.每个字符串都是由Unicode字符组成,并可以访问这些字符.
字符串中也可以插入常量,变量,文本和表达式.这使得建立个性化的字符串来显示,存储以及保持更加容易.
注意点:
Swift中的Sting类型与OC中Foundation的NSString类是无缝桥接的.如果你正在使用Cocoa或者Cocoa Touch的Foundation框架,那么所有调用的NSString API都可以使用String值.也 可以使用String类型值来匹配任何NSString实例的API.
String Literals (字符串文本)
在你的代码中,可以包含预先定义的String值(字符串文本),它是使用一组双引号(“”)括住的一个固定文本字符的序列.
字符串文本可以用了初始化一个常量或变量:
let someString = "Some string literal value
由于使用了String类型字符文本来给常量 someString进行初始化,因此Swift可以检查出常量的类型.
字符串文本可以包含下面特殊的字符:
- 转义的特殊字符 \0 (空字符), \\ (反斜线), \t (水平制表符), \n (换行), \r (回车), \" (双引号) 和 \‘ (单引号)
- 单字节的Unicode 符号 , 写为 \xnn, 其中nn 是两个十六进制数字
- 双字节 Unicode 符号, 写为 \unnnn, 其中 nnnn 是四个十六进制数字
- 四字节 Unicode 符号, 写为 \Unnnnnnnn, 其中 nnnnnnnn 是八个十六进制数字
下面的代码演示了每种特殊字符的样例.常量wiseWords包含两个转义字符双引号(”),常量dollarSign, blackHeart, 和 sparklingHeart演示了其他不同的Unicode字符格式:
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowledge" - Einstein
let dollarSign = "\x24" // $, Unicode scalar U+0024
let blackHeart = "\u2665" // ♥, Unicode scalar U+2665
let sparklingHeart = "\U0001F496" // ??, Unicode scalar U+1F496
Initializing an Empty String (初始化一个空字符串)
创建一个空值的字符串,可以通过两种方式:给变量赋值一个空的文本字符串,或者使用初始化语法来初始化一个新的String实例:
var emptyString = "" // 空字符文本
var anotherEmptyString = String() // 初始化语法
// these two strings are both empty, and are equivalent to each other
通过查看它们的布尔属性isEmpty来确定一个字符串的值是否为空:
if emptyString.isEmpty {
println("Nothing to see here")
}
// prints "Nothing to see here”
String Mutability (可变字符串)
如果希望一个指定的字符串可以被修改(或可变化),那么可以把它赋值给一个变量;如果希望字符串不被改变,那么把它赋值给一个常量:
var variableString = "Horse"
variableString += " and carriage"
// variableString is now "Horse and carriage"
let constantString = "Highlander"
constantString += " and another Highlander"
// this reports a compile-time error - a constant string cannot be modified”
注意点:
这与OC中和Cocoa的可变字符串不同;OC中一个字符串是否可变,是通过中两个类之间选择 (NSString 和NSMutableString )
Strings Are Value Types (字符串本值类型) /*Value Type:笔者自译为:本值类型,参考时请注意!可能有误*/
在Swift中,字符串类型是一种本值类型.如果你创建一个新的字符串值,当把它传递给一个函数或者方法时,或将它赋值给一个变量或者常量时,会建立这个字符串值的一个拷贝副本.并 且传递和赋值都是使用这个副本而非原值.
注意点:
Swift中字符串的这种行为是与Cocoa的NSString方式不同.在Cocoa中创建的NSString实例,传递给函数或者方法,或者赋值给变量,都是传递这个NSString的一个引用,而不是 NSString的拷贝副本(除非你明确的指定要求副本拷贝).
Swift的默认拷贝(copy-by-default)字符串方式是为了确保当一个方法或函数传给你一个字符串值的时候,不必关心这个值具体是从哪里来,都可以确切的保留这个字符串(没有被改变, 除非你亲自修改了它).
在后台,Swift的编译器会自动选择字符串的用法,这样保证字符串的副本拷贝行为只在必须的时候才会执行.这就意味着你使用字符串的时候可以获得非常高的效率.
/********************待续......************************/