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

20

我正在使用Xcode Playground为一些简单的iOS8应用程序尝试Swift中的表情符号。为此,我想创建类似于Unicode /表情符号地图/描述的东西。

为了做到这一点,我需要有一个循环,允许我打印出一个表情符号列表。 我考虑的是以下内容:

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的参考的查找表,但我想要一个懒惰/简单的方法来实现相同的结果。


1
我最近写了一个Gist,可以在这里找到,它可以从网站获取所有标准unicode表情符号,解析并打印出来。同时还会打印从AA到ZZ的所有国家代码表情符号。我知道你不想使用网络进行操作,但我认为其他人可能会用得上。此外,你也可以修改它,以便创建一个表情符号编号列表,然后离线使用。 - Kametrixom
1
请检查此答案 https://dev59.com/bYnda4cB1Zd3GeqPAIMr#60565823 - Hosny
1个回答

53
你可以使用一个 Range 循环遍历这些十六进制值:0x1F601...0x1F64F,然后使用 UnicodeScalar 创建 String
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文件中的所有表情符号的可解析Unicode序列: http://unicode.org/Public/emoji/

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


+1 这比我之前尝试的奇怪的 CFStringTransform 示例好多了。 - Craig Otis
很棒的解决方案,@Mike。这使得它变得简单而美丽。 - Yogesh
4
好的,我会尽力为您翻译。这很棒。但是你在哪里找到了这些 Unicode 代码点的范围?这些范围是否涵盖所有表情符号?截止何时? - algal
1
@algal,老实说我不记得我从哪里找到这些了,但我想我只是使用了问题中的链接,并从那里获取了一些范围。但正如代码中的注释所说,那绝对不是所有表情符号的完整列表;它只是为了展示一种循环一组范围的方法。 - Mike S
如果要创建自定义键盘,我假设使用这些表情符号不违反任何政策,对吗? - VDog
我很好奇你是如何发现的。你是怎么知道哪些十六进制值是表情符号的? - nodebase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接