如何在不使用任何形式的查找表的情况下在 Swift for iOS 8 中列出(几乎)所有表情符号?

Posted

技术标签:

【中文标题】如何在不使用任何形式的查找表的情况下在 Swift for iOS 8 中列出(几乎)所有表情符号?【英文标题】:How to list (almost) all emojis in Swift for iOS 8 without using any form of lookup tables? 【发布时间】:2014-10-02 22:51:47 【问题描述】:

我在 Swift 中使用 Xcode Playground 来玩一些简单的 ios8 应用程序中的表情符号。为此,我想创建类似于 unicode/emoji 地图/描述的东西。

为了做到这一点,我需要有一个循环,可以让我打印出表情符号列表。我正在考虑这些方面的事情

for i in 0x1F601 - 0x1F64F 
    var hex = String(format:"%2X", i)
    println("\u\(hex)") //Is there another way to create UTF8 string corresponding to emoji

但是 println() 会抛出错误

Expected ''in \u... escape sequence. 

有没有我想念的简单方法?

我了解并非所有条目都对应表情符号。另外,我可以参考http://apps.timwhitlock.info/emoji/tables/unicode 创建一个查找表,但我想要一个懒惰/简单的方法来实现相同的目标。

【问题讨论】:

我最近写了一个可用的 gist here,它从网站上获取所有标准的 unicode 表情符号,解析它们并打印它们。它还打印出从 AA 到 ZZ 的所有国家代码表情符号。我知道您不想为此使用网络,但我想其他人可以使用它。你也可以修改它,以便它创建一个表情符号的数字列表,然后可以离线使用 查看这个答案***.com/a/60565823/5251783 【参考方案1】:

您可以使用Range:0x1F601...0x1F64F 循环这些十六进制值,然后使用UnicodeScalar 创建Strings:

for i in 0x1F601...0x1F64F 
    guard let scalar = UnicodeScalar(i) else  continue 
    let c = String(scalar)
    print(c)

输出:

??????????????????????????????????????????????? ????????????????????????????????

如果你想要所有的表情符号,只需在一个范围数组上添加另一个循环:

// NOTE: These ranges are still just a subset of all the emoji characters;
//       they seem to be all over the place...
let emojiRanges = [
    0x1F601...0x1F64F,
    0x2702...0x27B0,
    0x1F680...0x1F6C0,
    0x1F170...0x1F251
]

for range in emojiRanges 
    for i in range 
        guard let scalar = UnicodeScalar(i) else  continue 
        let c = String(scalar)
        print(c)
    


对于那些询问的人,可以在此处找到可用表情符号的完整列表:https://www.unicode.org/emoji/charts/full-emoji-list.html

可以在您感兴趣的版本目录下的emoji-sequences.txt 文件中找到所有表情符号的可解析列表:http://unicode.org/Public/emoji/

截至 2021 年 9 月 15 日,Apple 设备上可用的表情符号标准的最新版本为 13.1。

【讨论】:

+1 这比我玩的那些奇怪的 CFStringTransform 例子好多了。 很好的解决方案@Mike。这使它变得如此简单而美丽。 这很棒。但是,您在哪里找到了 unicode 代码点的这些范围?这些范围是否涵盖所有表情符号?什么时候? @algal 老实说,我不记得我在哪里挖的,但我想我只是使用了问题中的链接并从那里抓取了一些范围。正如代码中的注释所说,这绝对是不是所有表情符号的完整列表;它只是为了展示一种在一组范围内循环的方式。 如果创建自定义键盘,我假设使用这些表情符号不违反任何政策?

以上是关于如何在不使用任何形式的查找表的情况下在 Swift for iOS 8 中列出(几乎)所有表情符号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 UIWebView 的情况下在 iOS 10 中显示带有 HTML 标签的文本(使用 swift)

如何在不使用 _id 字段但使用多个属性的情况下在 mongoose 中查找子文档

如何在不重复代码的情况下在所有控制器中显示警报?

如何在不通过 Web 调用的情况下在浏览器中查找地理位置

C/C++ Linux,如何在不使用 IP 的情况下在网络上查找邻居(仅限 MAC)

如何在不使用任何库的情况下在颤振中使用 bloc