个别表情符号分为三个符号

时间:2017-07-15 02:37:53

标签: swift macos emoji nscollectionview

enter image description here

如果您启动 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个符号的数组吗?感谢。

enter image description here

2 个答案:

答案 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