2017-06-06 19 views
3
let myString = "☺️" 

let emoji = "☺️☹️" 

let characterSet = CharacterSet(charactersIn: emoji) 

let range = (myString as NSString).rangeOfCharacter(from: characterSet) 
(myString as NSString).substring(with: range) 
(range as NSRange).location 
(range as NSRange).length 
(myString as NSString).length 

substring == myString 

此代碼可以在Playgrounds中運行。嘗試將myString更改爲任何表情符號。與包含它們的字符集相比,只有2個表情符號返回不正確的長度

我在這裏使用NSString和NSRange作爲它們的值更容易演示,但這與Swift String或Range具有完全相同的行爲。

當我將myString設置爲大部分表情emojis時,範圍將返回爲長度爲2,並且子字符串可以在其他地方適當地使用。只有2個臉部表情符號 - 「smiling face」表情符號和「frowning face」表情符號,範圍將返回爲1的長度。在任何情況下,字符串的長度都會返回爲2.給定範圍1的子字符串是不完整,並且您可以看到將其與myString進行比較,作爲將其與自身進行比較的示例,結果爲false。這兩個表情符號的範圍的結果應該是2.

有趣的是,在unicode規範中,這兩個表情符號與其鄰居有着巨大不同的unicode值。

這似乎可能是一個iOS的錯誤。我想不出任何我個人可能在這裏做錯的事情,因爲它與所有其他表情符合。

+0

這個表情符(符號)或其他什麼東西? –

+0

這很可能是UTF-16代碼單元的數量。笑臉和皺眉臉是U + 2639和U + 263A(在BMP中),另一個表情符號在表情符號範圍內(U + 01F600到U + 01F64F)。 – roeland

回答

1

幾乎沒有一個答案,但多以適應一個評論如此容忍我:)

我不知道你是否已經看到了這一點已經但是我覺得你的問題是在的平臺解決國家來自WWDC 2017的聯合討論(https://developer.apple.com/videos/play/wwdc2017/102/)中有關Swift 4中的新內容的部分。

如果您在約23分鐘12秒的時間內觀看視頻,您會看到Ted Kremenek談論他們是如何修復使用Unicode 9 Grapheme Braking將Swift 4中的unicode字符分離出來。

另外,看看this question and answer

是......不要問我具體是什麼這一切意味着什麼,但它好像他們正在努力吧:)

相關問題