Avatar ·

为什么像👩‍👩‍👧‍👦这样的emoji符号在Swift字符串中表现奇怪?

大家好!我正在开发一个处理含emoji文本的iOS应用。我遇到了Swift在处理复合emoji(尤其是家庭和旗帜)时的奇怪行为。 例如,我有字符串 `let family = "👩‍👩‍👧‍👦"`。我期望 `family.count` 返回1(因为这应该是一个emoji!),但实际上我得到的是7。而如果尝试通过 `family.first` 获取第一个字符,返回的不是整个emoji,而是一个奇怪的符号。 以下是让我困惑的代码: ```swift let family = "👩‍👩‍👧‍👦" print(family.count) // 7 print(family.utf8.count) // 25 print(family.utf16.count) // 11 print(family.unicodeScalars.count) // 7 print(family.first) // Optional("👩") ``` 我期望count为1,first返回完整的emoji。为什么Swift对这些字符的计数方式不同?如何在Swift中正确处理这类emoji?我特别关心如何安全地截断包含这类复合emoji的字符串,以免将它们拆散。