每个表情符号都有一个描述,您可以在Mac OS的⌃⌘Space
特殊字符选择器中看到。有a list of them here。有没有办法让我在代码中查询这个描述(没有将它们全部输入到Struct中)?
我想做点什么:
let : Character = ""
let desc: String = .description
并desc
解析为"SMILING FACE WITH OPEN MOUTH AND SMILING EYES"
。
答案 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)
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,您可以使用以下两种方法之一来获取表情符号字符的描述。
Unicode.Scalar.Properties
的{{1}}属性 name
具有name
属性。 Unicode.Scalar.Properties
具有以下声明:
name
标量的公开名称。
下面的Playground代码示例展示了如何使用var name: String? { get }
来获取Unicode标量的发布名称:
name
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标量在nameAlias
和nameAlias
之间的区别:
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}