加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift基础:String数据存储和长度

发布时间:2020-12-14 06:27:04 所属栏目:百科 来源:网络整理
导读:Swift中字符串的存储机制与其它语言不同,采用的不是固定字节方式存储字符,每个字符占用的字节数可能不同。 当我们需要知道一个字符串有多少字符串时,我们往往想知道的是我们所看到的字符数,而非存储的字节数。 一个字符可能需要1,2,3,4个字节来存储。

Swift中字符串的存储机制与其它语言不同,采用的不是固定字节方式存储字符,每个字符占用的字节数可能不同。

当我们需要知道一个字符串有多少字符串时,我们往往想知道的是我们所看到的字符数,而非存储的字节数。

一个字符可能需要1,2,3,4个字节来存储。

英文:1个字节

xxx: 2 个字节? --- 没找到例子

中文:3个字节

emoji表情字符:4个字节

charaters.count表示有多少字符,也就是我们所见到有几个字符,而不关心其存储方式。

与unicodeScalars.count是一样的。



for codeUnit in language.utf8
{
    print("utf8:(codeUnit) ",terminator: "")
}
print("n")
for codeUnit in language.utf16
{
    print("utf16:(codeUnit) ",terminator: "")
}

结果:
utf8:83 utf8:119 utf8:105 utf8:102 utf8:116 utf8:232 utf8:175 utf8:173 utf8:232 utf8:168 utf8:128 

utf16:83 utf16:119 utf16:105 utf16:102 utf16:116 utf16:35821 utf16:35328 


为了方便使用,我们可以扩展String的属性:

//自定义字符串长度的计算属性
extension String
{
    var length: Int {
        return self.characters.count
    }
}
language.length   //returns 7


我们再看看官方的例子,说的比较清楚:



这是一个混有不同类型字符的例子,狗头是表情字符,占用4个字节。


1. utf8 表达:




可以看到占用了10个字节,即dogString.utf8.count == 10

每个单位是 UInt8 类型


2. utf16表达:dogString.utf16.count == 6

每个单位是 unsigned int16类型


一个表情符号需要2个UInt16表示。


3. unicodeScalar 标量表示

dogString.unicodeScalars.count == 5

每个单位是UnicodeScalar,占用UInt32的内存,持有21bit的数据。

EachUnicodeScalarhas avalueproperty that returns the scalar’s 21-bit value,represented within aUInt32value。


这种表达方式最接近我们所见到的内容。


参考链接:

Swift_Programming_Language:StringsAndCharacters

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读