Swift基礎:String資料存放區和長度

來源:互聯網
上載者:User

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類型


一個Emoji需要2個UInt16表示。



3. unicodeScalar 標量表示


dogString.unicodeScalars.count == 5


每個單位是UnicodeScalar,佔用UInt32的記憶體,持有21bit的資料。

Each UnicodeScalar has a value property that returns the scalar’s 21-bit value, represented within a UInt32value。



這種表達方式最接近我們所見到的內容。


參考連結:

Swift_Programming_Language:StringsAndCharacters


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.