2016-08-18 55 views
0

的CharacterView和UnicodeScalarView之間的不同下面的兩個代碼幾乎做了同樣的事情什麼是String類型

for character in "Dog!".characters { 
    print(character) 
} 

for character in "Dog!".unicodeScalars { 
    print(character) 
} 

然而,當我檢查背後的意義更詳細的信息,我發現了差異。 characters屬性是CharacterView的類型,而unicodeScalarsUnicodeScalarView的類型。

問題

什麼是它們之間的區別?

哪種屬性首選什麼情況? (會是不錯的一個例子)

非常感謝

+2

https://developer.apple.com/swift/blog/?id=30是一個很好的概述。 - 用'「」'試試! –

+0

@MartinR謝謝 – SLN

回答

1

這可以歸結爲一種CharacterUnicodeScalar之間的差異。

Unicode的標量

在幕後,斯威夫特的本地字符串類型從Unicode標值構建。 Unicode標量是字符或修飾符的唯一21位數字,例如LATIN SMALL LETTER A(「a」)的U + 0061或FRONT-FACING BABY CHICK(「」)的U + 1F425。

...

擴展字形集羣

斯威夫特的性格類型的每個實例代表單個擴展字形集羣。擴展的字形集羣是一個或多個Unicode標量的序列,它們(當組合時)產生單個可讀字符。

下面是一個例子。字母é可以表示爲單個Unicode標量é(拉丁文小寫字母E WITH ACUTE,或U + 00E9)。然而,相同的字母也可以表示爲一對標量 - 標準字母e(拉丁小字母E或U + 0065),然後是組合急性尖端標量(U + 0301)。將ACUTE ACCENT標量組合標量以圖形方式應用於其之前的標量,當它通過支持Unicode的文本呈現系統呈現時,將e變爲é。

來自Swift Programming Language GuideStrings and Characters部分。

在大多數情況下,我可以想到你會想要處理Character實例,因爲它們是人類語言的最小單元。我無法想象在不考慮完整擴展字形集羣的情況下,您想要在修改器上進行操作的情況。

+0

嗨亞歷克斯,謝謝你的幫助 – SLN

相關問題