Swift学习笔记(5)——字符串和字符(一)

来源:互联网 发布:电力网络大学视频 编辑:程序博客网 时间:2024/06/17 21:07

1. 初始化空字符串

要创建一个空字符串作为初始值,可以将空的字符串字面量赋值给变量,也可以初始化一个新的String实例:

var emptyString = ""               // 空字符串字面量var anotherEmptyString = String()  // 初始化方法// 两个字符串均为空并等价。

可以通过检查其Bool类型的isEmpty属性来判断该字符串是否为空:

if emptyString.isEmpty {    print("Nothing to see here")}// 打印输出:"Nothing to see here"

2.字符串可变性

var variableString = "Horse"variableString += " and carriage"// variableString 现在为 "Horse and carriage"let constantString = "Highlander"constantString += " and another Highlander"// 这会报告一个编译错误 (compile-time error) - 常量字符串不可以被修改。

注:
在 Objective-C 和 Cocoa 中,您需要通过选择两个不同的类(NSString和NSMutableString)来指定字符串是否可以被修改。

3. 使用字符

(1)通过for-in循环来遍历字符串中的characters属性来获取每一个字符的值

for character in "Dog!".characters {    print(character)}// D// o// g// !

(2)通过标明一个Character类型并用字符字面量进行赋值,可以建立一个独立的字符常量或变量:

let exclamationMark: Character = "!"

(3)字符串可以通过传递一个值类型为Character的数组作为自变量来初始化:

let catCharacters: [Character] = ["C", "a", "t", "!"]let catString = String(catCharacters)print(catString)// 打印输出:"Cat!"

4.连接字符串和字符

(1)通过加法运算符(+)将两个字符串连接在一起,创建一个新串

let string1 = "hello"let string2 = " there"var welcome = string1 + string2// welcome 现在等于 "hello there"

(2)通过加法赋值运算符 (+=)

var instruction = "look over"instruction += string2// instruction 现在等于 "look over there"

(3)用append()方法将一个字符附加到一个字符串变量的尾部

let exclamationMark: Character = "!"welcome.append(exclamationMark)// welcome原来为"hello there",用append()方法将"!"附加到原串尾部// welcome 现在等于 "hello there!"

注:
您不能将一个字符串或者字符添加到一个已经存在的字符变量(Character类型)上,因为字符变量只能包含一个字符。

5. 字符串插值

格式:\ (要插的值的表达式)

let multiplier = 3let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"// message 是 "3 times 2.5 is 7.5"

注:
插值字符串中写在括号中的表达式不能包含非转义反斜杠 ( \ ),并且不能包含回车或换行符。不过,插值字符串可以包含其他字面量。

6. Unicode

Swift 的String和Character类型是完全兼容 Unicode 标准的。

(一)Unicode 标量
Swift 的String类型是基于 Unicode 标量 建立的。 Unicode 标量是对应字符或者修饰符的唯一的21位数字。
注意:
(1)Unicode 码位(code poing) 的范围是U+0000到U+D7FF或者U+E000到U+10FFFF。Unicode 标量不包括 Unicode 代理项(surrogate pair) 码位,其码位范围是U+D800到U+DFFF。
(2)不是所有的21位 Unicode 标量都代表一个字符,因为有一些标量是留作未来分配的。

(二)字符串字面量的特殊字符
可以包含以下特殊字符:
• 转义字符\0(空字符)、\(反斜线)、\t(水平制表符)、\n(换行符)、\r(回车符)、\”(双引号)、\’(单引号)。
• Unicode 标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。

let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"// "Imageination is more important than knowledge" – Enistein//\":双引号let dollarSign = "\u{24}"             // $, Unicode 标量 U+0024let blackHeart = "\u{2665}"           // ♥, Unicode 标量 U+2665let sparklingHeart = "\u{1F496}"      // (爱心的表情), Unicode 标量 U+1F496

(三)可扩展的字形群集
每一个 Swift 的Character类型代表一个可扩展的字形群。
例如:
字母é:
方法一:用单一的 Unicode 标量é(U+00E9)
方法二:标准的字母e(U+0065) +一个急促重音(́ )的标量(U+0301)

let eAcute: Character = "\u{E9}"                         // élet combinedEAcute: Character = "\u{65}\u{301}"          // e 后面加上  ́// eAcute 是 é, combinedEAcute 是 é

可扩展的字符群集是一个灵活的方法,用许多复杂的脚本字符表示单一的Character值。
例子:

let precomposed: Character = "\u{D55C}"                  // 한let decomposed: Character = "\u{1112}\u{1161}\u{11AB}"   // ᄒ, ᅡ, ᆫ// precomposed 是 한, decomposed 是 한let enclosedEAcute: Character = "\u{E9}\u{20DD}"// enclosedEAcute 是 é⃝

7. 计算字符数量

如果想要获得一个字符串中Character值的数量,可以使用字符串的characters属性的count属性。
注:
在 Swift 中,使用可拓展的字符群集作为Character值来连接或改变字符串时,并不一定会更改字符串的字符数量。

var word = "cafe"print("the number of characters in \(word) is \(word.characters.count)")// 打印输出 "the number of characters in cafe is 4"word += "\u{301}"    // COMBINING ACUTE ACCENT, U+0301print("the number of characters in \(word) is \(word.characters.count)")// 打印输出 "the number of characters in café is 4"

注:
如果您正在处理一个长字符串,需要注意characters属性必须遍历全部的 Unicode 标量,来确定字符串的字符数量。
另外需要注意的是通过characters属性返回的字符数量并不总是与包含相同字符的NSString的length属性相同。