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

本文介绍了Swift中的字符和字符串类型,包括Character和String的区别、Unicode字符集、字符串构造及连接方法、可变性、基本操作如计数和遍历,以及字符串比较和获取Unicode编码的方法。Swift的String是值类型,不同于Objective-C的NSString引用类型。

 .字符类型

  1. Swift中使用Character类型表示单个字符,用String类型表示字符串。  

  2. Swift使用了Unicode字符集来存储字符,因此Swift的字符、字符集几乎可以存储世界上语言的任意字符。

  3. 字符必须用双引号包起来。——java中是不同的

   4. 定义字符有3种表示形式

      1). 直接通过单个字符来指定字符常量,例如 “A” “7”;

      2). 通过转义字符来表示特殊的字符常量,例如“\n” “\t”;

      3). 使用“\u{n}”的形式,其中n代表一个18位的十六进制数。

      

   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-8utf-16utf-32等。因此,无论什么字符,它在计算机底层的存储形式其实就是一个编号。

       

  .字符串类型

  1. 字符串就是多个字符的组合,将多个字符放在双引号中即可形成字符串。----不像Object-C中的字符串,需要在前面添加@符号)  

  2. 字符串的本质其实就是一个结构体,因此也可以调用结构体的构造器来创建字符串。举个栗子:

     var str2 = String(); //调用构造器来创建一个空的字符串

     var str3 = String(count:5, repeatedValue : Character("f"));  //创建具有5个重复字符的字符串

   3.Java中一样,Swift也是使用 +符号将多个字符串连接成一个字符串。

   4. SwiftStringFoundation框架的NSString类可以进行无缝桥接,只要程序需要NSString的地方都可以直接传入String作为替换。----使用NSString时必须在第一行使用import Foundation来导入Foundation框架。但是需要注意的是:SwiftStringFoundation框架中的NSString又非常大的差异----Foundation框架中的     NSString是一个类,因此它是一种引用类型(指针类型),程序使用NSString*的形式来声明字符串变量。在程序中创建NSString对象,并将它传给一个函数或方法,或者赋值给一个变量时,程序实际上传递的是该NSString对象的引用(指针),程序并不会复制NSString对象的副本。但SwiftString是一个结构体,因此它是一种值类型,程序使用String但形式来声明字符串变量,当程序创建了一个String实例,并将它传给一个函数或方法,或者赋值给另一个变量时,传递的是该String实例的副本。----即,NSString是址传递, SwiftString是值传递。

  .字符串的可变性

  1. Object-C中,字符串类有两个:NSStringNSMutableString,其中,NSString表示不可变字符串,NSMutableString表示可变字符串。

  2. Swift中,对字符串只提供来一种String类型,通过变量和常量来区分字符串是否可变。  

  .字符串的基本操作

  1. Swift提供了一个countElements()函数来计算String变量或常量中的字符串。

  2. 由于Unicode字符的不同表示方式所需要的存储空间并不相同,因此Swift字符串中每个字符所占的内存空间不相同,所以推荐使用countElements()函数来获取字符串中包含的字符数。

 3. countElements()函数返回的字符数量与NSStringlength属性的返回值并并相同:NSStringlength属性是基于UTF-16字符集进行计算的,而不是真正基于Unicode字符进行计算的。为来解决这个问题,SwiftString提供了utf16count属性,该属性的返回值与NSStringlength属性的返回值总是相等。

  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个属性:

  1utf8:返回该字符在底层的utf-8编码集合,该属性返回一个UTF8View类型的值,UTF8View是一个包含多个UInt8值的集合

  2utf16:返回该字符在底层的utf-16编码集合,该属性返回一个UTF16View类型的值,UTF16View是一个包含多个UInt16值的集合  

  3unicodeScalars:返回该字符串底层的Unicode标量集合,该属性返回一个UnicodeScalarView类型的值,UnicodeScalarView是一个包含多个UnicodeScalar值的集合。每个UnicodeScalar都代表一个21位的United编码,每个UnicodeScalar都拥有一个  value属性,可返回对应的数值,该数值的类型是UInt32


上一篇:每天学一点Swift----可选类型

下一篇: 每天学一点Swift----运算符与表达式(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值