为什么像👩👩👧👦这样的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的字符串,以免将它们拆散。