如果您启动 TextEdit 并选择表情符号&编辑下的符号, Sierra (macOS 10.12)下的表情符号和人物将包含291个符号列表。我想用NSCollectionView
列出所有这些291表情符号。现在,我有一个由291个表情符号组成的字符串。我将它们分开来创建一个数组,如下所示。
class SmileyViewController: NSViewController, NSCollectionViewDelegate, NSCollectionViewDataSource {
// MARK: - Variables
var emojiArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let emojiString = "..." // 291 symbols
emojiArray = emojiString.characters.map { String($0) }
print(emojiArray.count) // 408, not 291
collectionView.reloadData()
}
}
运行上面的代码,我得到的数组实际上包含408个符号。如果我仔细观察,他们中的一些人将自己分成三个符号。例如,名为金发男子的符号将自身变为三个符号。其中一个是性别符号。 this topic表明单个表情符号可能是几个或多个符号的组合。有什么办法可以将包含291个符号的特定字符串分成包含291个符号的数组吗?感谢。
答案 0 :(得分:1)
使用表情符号创建集合视图的更好方法是使用unicode字符。 https://apps.timwhitlock.info/emoji/tables/unicode列出了可用的表情符号。我使用的一个实现是我的答案:Emoji Picker Ios Swift
答案 1 :(得分:1)
实际上是期望这种行为。在swift 3.0中,表情符号不算作字形簇。许多表情符号实际上是由连接器零连接的单个表情符号序列。所以character
属性实际上是给你所有单个表情符号。这就是为什么你从291 顶级表情符号获得408单个表情符号的原因
表情符号字符串的这种行为在swift 4中得到了很好的改进很多。在swift 4中,你可以直接将count
调用到表情符号字符串中,结果将得到291
有关此主题的更多信息,请查看here