字符串和字符
字符串是字符的有序集合,比如“hello,world”或者“albatross”。Swift中的字符串用String类型表示,就是一个存储Character类型的集合。
Swfit的字符串和字符是基于Unicode的。创建和操纵字符串的语法是轻量而且易读的,和C很像。字符串拼接使用“+”操作符。
初始化一个空字符串
两种方式:”“或者String()
判断一个字符串是否是空:该字符串的isEmpty 属性(布尔值)
字符串是否可以修改
字符串是值类型
Swfit的字符串是指类型。创建字符串、字符串作为参数传值、给字符串赋值,这些情况都是值的复制操作。值类型的表述在结构体和枚举是值类型一节有描述。
这点和 Cocoa中的NSString不同。NSSting是引用操作。
这样做的好处是如果一个方法或者函数反给你一个字符串,这个字符串就是由你控制,你不必担心它被来源处修改。你可以确信,传递给你的值只有你有修改的权限。
这也做的结果就是字符串的操作都是复制。
Behind the scenes,Swift’s compiler optimizes string usage so that actual copying takes place only when absolutely necessary. This means you always get great performance when working with strings as value types.
字符操作
Swift的字符串就是一定顺序的字符集合。你可以访问字符串中的单个字符,通过for -in 循环语句遍历整个字符串。
使用Character 能创建一个字符常量或者变量,赋值采用只有一个字符的字符串。
let yenSign: Character = ”¥”
连接字符和字符串
使用+、+=连接字符串,得到一个新的字符串。
使用字符串的append 方法连接一个字符。
当然了,不能追加一个字符串或者字符到一个字符变量上,因为字符只能包含一个字符。
字符串改写
这个操作会创建一个新的字符串,从一堆常量、变量、常字符(literals)和表达式(??)的混合体中。
String interpolation is a way to construct a new String value from a mix of constants,variables,literals,and expressions by including their values inside a string literal
使用反斜杠做前缀,圆括号包裹要处理的字符内容,就做了这个操作。
let multiplier = 3
let message = ”(multiplier) times 2.5 is (Double(multiplier) * 2.5)”
// message is “3 times 2.5 is 7.5”
以上的例子中,multiplier的值被插入到一个常字符( (multiplier))中,当这条语句被执行的时候,这个占位符被替换为 multiplier的实际值。后续的表达式会计算Double(multiplier) * 2.5的值,将计算结果7.5插入到字符串中。
In this case,the expression is written as (Double(multiplier) * 2.5) when it is included inside the string literal.
字符串改写操作中,圆括号中禁止出现双引号、反斜杠以及回车换行。
Unicode
Unicode是一种国际标准编码,用来处理不同书写系统中的文字。有了它,人们可以以统一的模式表示任何语言的几乎所有字符,能够从一个外部源(比如一个文本文件或者一个web页面)中读写这些字符。Swift的String和Character类型是完全兼容Unicode的,关于此,本章有详细的描述。
Unicode标量值(Unicode Scalars)
实际上,Swift的本地String类型是用Unicode标量值创建的。一个Unicode标量是一个组21bit的数字,表示一个字符或者一个操作符,比如 U+0061表示LATIN SMALL LETTER A(“a”)、U+1F425表示FRONT-FACING BABY CHICK (“