美文网首页
每天学一点Swift----字符和字符串

每天学一点Swift----字符和字符串

作者: 冯可乐同学 | 来源:发表于2017-05-12 19:36 被阅读33次

    一.字符类型

    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。

    举个栗子:

    let cn = "chain,🚩"

    for s in cn.utf8

    {

    print("\(s)")

    }

    for s in cn.utf16

    {

    print("\(s)")

    }

    for s in cn.unicodeScalars

    {

    print("\(s)")

    }

    相关文章

      网友评论

          本文标题:每天学一点Swift----字符和字符串

          本文链接:https://www.haomeiwen.com/subject/uprtxxtx.html