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属性相同。
- Swift学习笔记(5)——字符串和字符(一)
- 字符和字符串—Swift学习笔记(六)
- Swift学习笔记(6)——字符串和字符(二)
- Swift学习笔记系列——(2)字符串和字符
- The Swift Programming Language学习笔记(四)——字符串和字符
- 【Swift】学习笔记(三)——字符和字符串
- Swift学习笔记(三)之字符串和字符
- swift学习笔记-字符串和字符(Strings and Characters)
- Swift--字符串和字符(一)
- Swift学习笔记(十四)——字符,常量字符串与变量字符串
- swift笔记 (三) —— 字符和字符串
- Swift学习笔记(一)——Swift的数据类型
- Swift 字符串和字符(笔记)
- swift学习之路(五)字符串和字符
- swift 字符串——swift 学习(一)
- swift基础教程——字符和字符串
- Swift--字符串和字符(二)
- swift基础(二):字符串和字符
- 筛法加强版
- ImageNet Evolution论文笔记(2)
- Solr之查询索引。
- form表单避免重复提交
- jquery after before append appendto prepend prependto的区别
- Swift学习笔记(5)——字符串和字符(一)
- Kotlin 函数与Lambdas(四)--- 协程
- android 保证黑屏之后线程可以继续运行
- C++ 通过 jvm 调 java
- POJ2891 Strange Way to Express Integers
- 设计模式之装饰者模式
- SpringMvc之Web初搭建(一)
- const iterator和const_iterator的区别
- 每个开发人员都应该知道的10个Linux命令