获取表情符号字符的描述

时间:2014-07-11 14:01:06

标签: swift string character emoji

每个表情符号都有一个描述,您可以在Mac OS的⌃⌘Space特殊字符选择器中看到。有a list of them here。有没有办法让我在代码中查询这个描述(没有将它们全部输入到Struct中)?

我想做点什么:

let : Character = ""
let desc: String = .description

desc解析为"SMILING FACE WITH OPEN MOUTH AND SMILING EYES"

4 个答案:

答案 0 :(得分:18)

Core Foundation函数CFStringTransform()具有转换功能 确定特殊字符的Unicode标准名称。例如:

let c : Character = ""

let cfstr = NSMutableString(string: String(c)) as CFMutableString
var range = CFRangeMake(0, CFStringGetLength(cfstr))
CFStringTransform(cfstr, &range, kCFStringTransformToUnicodeName, false)
print(cfstr)

输出:

\N{SMILING FACE WITH OPEN MOUTH AND SMILING EYES}

有关详细信息,请参阅http://nshipster.com/cfstringtransform/ CFStringTransform()

答案 1 :(得分:5)

使用Core Foundation的CFStringTransform()的Martin R answer仍然可以使用,但关键功能实际上来自kCFStringTransformToUnicodeName,而在Swift 2中我们可以像这样使用它,通过桥接{ {1}}并致电NSString

stringByApplyingTransform
  

\ N {露出嘴巴和微笑的笑脸}

字符串相同:

let c: Character = ""
if let result = (String(c) as NSString)
    .stringByApplyingTransform(
        String(kCFStringTransformToUnicodeName),
        reverse: false) {
    print(result)
}
  

这是一个\ N {SMING FACE WITH OPEN MOUTH AND SMILING EYES}

答案 2 :(得分:3)

使用Swift 5,您可以使用以下两种方法之一来获取表情符号字符的描述。


#1。使用Unicode.Scalar.Properties的{​​{1}}属性

name具有name属性。 Unicode.Scalar.Properties具有以下声明:

name
  

标量的公开名称。

下面的Playground代码示例展示了如何使用var name: String? { get } 来获取Unicode标量的发布名称:

name

#2。使用let emoji: Character = "" for scalar in emoji.unicodeScalars { print(scalar.properties.name) } /* prints: Optional("SMILING FACE WITH OPEN MOUTH AND SMILING EYES") */ 的{​​{1}}属性

Unicode.Scalar.Properties还有一个名为nameAlias的属性,具有以下声明:

nameAlias
  

标量的规范形式别名。 [...]如果名称错误输入,则提供Unicode.Scalar.Properties属性以进行更正。例如,U + FE18的名称是“垂直右白色长颈鹿的演示文稿”(请注意,“括号”拼写错误)。 var nameAlias: String? { get } 属性将包含更正的名称。

下面的Playground示例代码显示了U + FE18 Unicode标量在nameAliasnameAlias之间的区别:

name
nameAlias

答案 3 :(得分:2)

Swift 3版 Eric Aya 的回答:

let s = "This is a "

if let result = s.applyingTransform(
    kCFStringTransformToUnicodeName as StringTransform,
    reverse: false) {
    print(result)
}
  

这是一个\ N {SMING FACE WITH OPEN MOUTH AND SMILING EYES}