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的錯誤。我想不出任何我個人可能在這裏做錯的事情,因爲它與所有其他表情符合。
這個表情符(符號)或其他什麼東西? –
這很可能是UTF-16代碼單元的數量。笑臉和皺眉臉是U + 2639和U + 263A(在BMP中),另一個表情符號在表情符號範圍內(U + 01F600到U + 01F64F)。 – roeland