对比OC学习swift-3-字符串与字符

740 阅读4分钟

本文是学习www.cnswift.org/ 网站上的swift文章结合OC相关知识进行的总结, 文章会随着学习的深入不断更新,欢迎关注以免迷路,让我们共同进步吧。

创建一个字符串

swift

1. 使用字符串字面量创建

字符串字面量就是被两个围起来的固定顺序文本字符。

let str = "hello"//使用字符串字面量创建一个字符串常量
var str2 = "Hi"//使用字符串字面量创建一个字符串变量

创建多行字符串时使用”“”符号将多行字符串围起来

2. 使用初始化方法创建

var str = String()

swift 中创建可变字符串还是不可变字符串的区别就是使用let还是var

3. 字符串插值

字符串插值是需要将插入到字符串字面量里的元素用\()包起来

image.png

OC

oc 中也支持字面量创建以及初始化方法创建

NSString *str = @"Hello";//字面量创建
NSString *str2 = [NSString stringWithFormat:@"Hi"];//初始化方法创建

oc也可以通过字符串插值来构建字符串,但在构建时需要指明

oc中创建多行字符串的方法和swift也有区别,oc中是直接通过添加换行符(\n)来达到创建多行字符串的目的

image.png

与swift的区别是OC的可变字符串是通过 NSMutableString,不可变字符串时通过 NSString 创建

//创建可变字符串
NSMutableString *mutStr = [NSMutableString stringWithString:@"1"];
[mutStr appendString:@"2"];//给可变字符串添加字符
NSLog(@"mutStr:%@",mutStr);
//打印:12

字符

swift

swift 中有专门表示单个字符的类型,Character,这个类型只能存储一个字符,准确的说法是 Character 表示的是一个单一的扩展字形集群,(扩展字形集群是一个或多个有序的Unicode标量产生的人类可度字符)。

image.png 比如上面的代码,在字符串 cafe 后面追加了一个字符 \u{301} 然后再打印还是四个字符,这时说明添加的这字符和原字符串中最后一个字符是在一个扩展字形集群。 这个时候打印字符串的count还是4

OC

oc中没有扩展字形集群的概念,所以上述的操作在oc中添加时,会打印5个字符出来。 原因是OC中NSString中的长度是基于字符串的UTF-16表示中16位码元的数量来表示的,而swift中是已Unicode扩展字符集群的数量来表示的。

字符串索引

swift

swift 中每个string值都有相关的索引类型,相当于每个 Character 在字符串中的位置。因为 Character 是一个扩展字形集群,所以string 不能通过整数值索引。

**let** str = "123456"
**let** start = str[str.startIndex]
print(start)//1
**let** end = str[str.index(before: str.endIndex)]
print(end)"//6

startIndex :第一个Character的位置 endIndex: 最后一个字符的位置 index(before:):取索引前面一个字符 index(after:):取索引后面一个字符 index(_:offsetBy:)取某个位置再加偏移后的位置的字符

插入、删除、比较

swift

插入

  1. insert(_: at:)插入单个字符到特定索引位置
    • 参数1:要插入的字符 参数2:要插入的索引位置
  2. insert (contentsOf: at:) 插入字符串到特定索引位置
    • 参数1:要插入的字符串 参数2:要插入的索引位置
var str = "hello"
//插入单个字符
str.insert("!", at: str.endIndex)
print(str)//打印:hello!
//插入字符串
str.insert(contentsOf: "??", at: str.endIndex)
print(str)//打印:hello!??

删除

  1. remove(at:) 删除单个字符
    • 参数:要删除的字符的索引位置
  2. removeSubrange(_:) 删除字符串
    • 参数:要删除的字符串的区间

**var** str = "hello!?"
删除最后一个索引的字符
str.remove(at: str.index(before: str.endIndex))
print(str)//打印:hello!
//删除一个区间内的字符串
str.removeSubrange(str.startIndex..<str.index(str.startIndex, offsetBy: 3))
print(str)//打印:lo!

比较

相等

  1. 使用=来判断字符串是否相等
  2. 使用!= 来判断字符串不相等

注意如果两个字符串的扩展字符集群有着相同的语言意义和外形,则认为这两个字符串相等。

前缀和后缀相等

  1. hasPrefix(_:..):前缀是否相等
  2. hasSuffix(...):后缀是否相等

image.png

oc

增加

oc中字符串增加需要使用到可变字符串 NSMutableString

  • appendString: 增加字符串到目标字符串

image.png

删除

删除同样也是要使用`NSMutableString

  • deleteCharactersInRange:删除指定区间字符串

image.png

比较

  • isEqualToString : 判断两个字符串相同

image.png

前缀后缀相等

在oc中同样有判断前缀后缀是否相等的方法

  • hasPrefix 前缀是否相等
  • hasSuffix 后缀是否相等

image.png

本文是学习www.cnswift.org/ 网站上的swift文章结合OC相关知识进行的总结, 文章会随着学习的深入不断更新,欢迎关注以免迷路,让我们共同进步吧。