Swift中的String和NSString 以及其编码方式的坑

本文探讨了Swift中的String和Objective-C的NSString之间的差异,包括在处理子字符集和编码方式上的不同。String使用Unicode编码,通过String.Index操作子串,而NSString使用UTF-16,可以通过Int直接操作。由于编码差异,NSString在处理某些中文字符和表情符号时可能不如String友好。此外,Swift的Unicode编码更符合现代标准,而NSString的16位编码可能遇到代理字符问题。在Swift中,一个Character可以存储一个汉字,而在C中,char类型可能会因字符过大而报错。
摘要由CSDN通过智能技术生成

String是swift语言中的字符类型

NSString是Foundation框架下的一个核心处理字符串的类 OC

随着Swift的快速更新 String 和 NSString 的差别越来越小了

首先两者可以通过在值后面加as 进行桥接转换的 

let str : String = "hello, world" as String

let str1 : NSString = str as NSString 

两者不同的是

 String:在操作String的子字符集时候只能使用String.Index 

let startIndex=str.startIndex

let Index=str.index(startIndex, offsetBy:5)

str[startIndex..<endIndex]

此时str 为"hello"

NSString:在操作NSString的子字符集的时候使用 Int整形就可以操作了 比较方便

str1.substring(from:5)

str1.substring(to:5)

编码方式的不同导致了操作的不同,其实用整形来操作 对于中文字符或者某些符号是不好的

注意这里:苹果官方文档上说到"CFString(NSString的底层) 代表了一个 Unicode 字符组成的数组...[Unicode] 标准定义了一个通用、统一的编码方案,其中每个字符 16 位。" 这里误导性很强,在OBJC中国期刊上可以看到 原作者已经出来声明。大家都知道现在Unicode是21位编码的,而这里又说NSString每个字符代表16位,这里说的Unicode是NSString 还在开发的时候(它最初是作为 Foundation Kit 的一部分在 1994 年发布的)࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值