每天学一点Swift----字符和字符串
来源:互联网 发布:淘宝客如何获取pid 编辑:程序博客网 时间:2024/05/21 00:48
一.字符类型
1. Swift中使用Character类型表示单个字符,用String类型表示字符串。
2. Swift使用了Unicode字符集来存储字符,因此Swift的字符、字符集几乎可以存储世界上语言的任意字符。
3. 字符必须用双引号包起来。——和java中是不同的
4. 定义字符有3种表示形式
1). 直接通过单个字符来指定字符常量,例如 “A”, “7”;
2). 通过转义字符来表示特殊的字符常量,例如“\n” “\t”;
3). 使用“\u{n}”的形式,其中n代表一个1~8位的十六进制数。
5. Swift中常用的转义字符如下:
\b ---- \u{8} \n ---- \u{a} \r ---- \u{d} \t ---- \u{9}
\" ---- \u{22} \' ---- \u{27} \\ ---- \u{5c}
6.关于字符集的知识:
计算机底层无法存储字符,计算机需要存储字符时,实际上存储的是该字符集对应的编号:当计算机要保存某个字符时只要将该字符的编号转换为二进制码,然后保存起来即可。所谓字符集,就是所有字符的编号组成的总和。早起美国人给英文字符、数字、标点符号等字符进行了编号,他们认为所有的字符顶多100多个,只要一个字节(8位,即256个字符编号)即可为所有的字符编号----这就是ASCII码字符集。后来,亚洲国家纷纷为本国文字进行编号----定制本国的字符集,但是这些字符集并不兼容。于是美国人又为世界上所有的书面语言的字符进行了统一编号,这次他们用了两个字节(16位,支持65536个字符编号),这就是Unicode字符集。后来Unicode又产生了多个变种:utf-8、utf-16、utf-32等。因此,无论什么字符,它在计算机底层的存储形式其实就是一个编号。
二.字符串类型
1. 字符串就是多个字符的组合,将多个字符放在双引号中即可形成字符串。----不像Object-C中的字符串,需要在前面添加@符号)
2. 字符串的本质其实就是一个结构体,因此也可以调用结构体的构造器来创建字符串。举个栗子:
var str2 = String(); //调用构造器来创建一个空的字符串
var str3 = String(count:5, repeatedValue : Character("f")); //创建具有5个重复字符的字符串
3.同Java中一样,Swift也是使用 +符号将多个字符串连接成一个字符串。
4. Swift的String与Foundation框架的NSString类可以进行无缝桥接,只要程序需要NSString的地方都可以直接传入String作为替换。----使用NSString时必须在第一行使用import Foundation来导入Foundation框架。但是需要注意的是:Swift的String与Foundation框架中的NSString又非常大的差异----Foundation框架中的 NSString是一个类,因此它是一种引用类型(指针类型),程序使用NSString*的形式来声明字符串变量。在程序中创建NSString对象,并将它传给一个函数或方法,或者赋值给一个变量时,程序实际上传递的是该NSString对象的引用(指针),程序并不会复制NSString对象的副本。但Swift但String是一个结构体,因此它是一种值类型,程序使用String但形式来声明字符串变量,当程序创建了一个String实例,并将它传给一个函数或方法,或者赋值给另一个变量时,传递的是该String实例的副本。----即,NSString是址传递, Swift的String是值传递。
三.字符串的可变性
1. 在Object-C中,字符串类有两个:NSString和NSMutableString,其中,NSString表示不可变字符串,NSMutableString表示可变字符串。
2. 在Swift中,对字符串只提供来一种String类型,通过变量和常量来区分字符串是否可变。
四.字符串的基本操作
1. Swift提供了一个countElements()函数来计算String变量或常量中的字符串。
2. 由于Unicode字符的不同表示方式所需要的存储空间并不相同,因此Swift字符串中每个字符所占的内存空间不相同,所以推荐使用countElements()函数来获取字符串中包含的字符数。
3. countElements()函数返回的字符数量与NSString的length属性的返回值并并相同:NSString的length属性是基于UTF-16字符集进行计算的,而不是真正基于Unicode字符进行计算的。为来解决这个问题,Swift为String提供了utf16count属性,该属性的返回值与NSString的length属性的返回值总是相等。
4. Swift提供了for-in循环来打印字符串中字符----类比与java中的for-each,举个栗子:
for s in str
{
print(s)
}
五.字符串比较
1. Swift提供le3种方式来比较字符串的值:字符串相等、前缀相等、后缀相等。
2. 如果两个字符串包含的字符及其序列完全相同,Swift认为两个字符串相等,判断字符串相等用 ==运算符进行判断。
3. Swift提供来hasPrefix函数和hasSuffix函数来判断字符串是否有前缀和后缀,如果有则返回true,否则为false,举个栗子:
var str = “ABcdef.com”
str.hasPrefix("AB") //return true
str.hasPrefix("ab") // return false
str.hasSuffix("com") // return true
六.获取字符串中字符的Unicode编码
1. 使用for-in遍历字符串时如果需要访问String底层存储的Unicode值,则需要借助于String提供的如下3个属性:
(1)utf8:返回该字符在底层的utf-8编码集合,该属性返回一个UTF8View类型的值,UTF8View是一个包含多个UInt8值的集合
(2)utf16:返回该字符在底层的utf-16编码集合,该属性返回一个UTF16View类型的值,UTF16View是一个包含多个UInt16值的集合
(3)unicodeScalars:返回该字符串底层的Unicode标量集合,该属性返回一个UnicodeScalarView类型的值,UnicodeScalarView是一个包含多个UnicodeScalar值的集合。每个UnicodeScalar都代表一个21位的United编码,每个UnicodeScalar都拥有一个 value属性,可返回对应的数值,该数值的类型是UInt32。
上一篇:每天学一点Swift----可选类型
下一篇: 每天学一点Swift----运算符与表达式(一)
- 每天学一点Swift----字符和字符串
- 每天学一点Swift——前言
- 每天学一点Swift----可选类型
- 每天学一点Swift----流程控制
- 每天学一点Swift----集合(一)
- 每天学一点Swift----集合(二)
- 每天学一点Swift----函数(一)
- 每天学一点Swift----函数(二)
- 每天学一点Swift----闭包(一)
- 每天学一点Swift----闭包(二)
- 每天学一点Swift----闭包(三)
- 每天学一点Swift----泛型(一)
- 每天学一点Swift----泛型(二)
- 每天学一点Swift---- 运算符函数
- 每天学一点Swift----元组(tuple)类型
- 每天学一点Swift----运算符与表达式(一)
- 每天学一点Swift----运算符与表达式(二)
- 每天学一点Swift----面向对象上(一)
- 17年黑龙江省赛的反思
- Python execute adb shell command
- ubuntu安装pytorch遇到的问题
- 如何理解HTTP协议的“无连接,无状态”特点
- 网页的基本标签
- 每天学一点Swift----字符和字符串
- 动态内存分配笔记与样例
- Java运算符之算术运算符
- iOS 字符串筛选手机号
- javaScript调用WordChart控件(C#开发的),js的数据传到C#方法后多了个“空格”
- 用matlab把某文件夹下所有.mp3格式文件转换成.wav
- 浅谈慕课网React入门课程笔记(一)
- 高斯相乘引理及其证明
- Java 线程