Получить описание персонажа Эможи
В каждом Emoji есть описание, которое вы можете увидеть в Mac OS ⌃⌘Space
специальный подборщик символов. Здесь список из них здесь. Есть ли способ для меня запросить это описание в коде (не вводя все их в Struct)?
Я хотел бы сделать что-то вроде:
let 😄: Character = "😄"
let 😄desc: String = 😄.description
и 😄desc
разрешить "SMILING FACE WITH OPEN MOUTH AND SMILING EYES"
.
Ответы
Ответ 1
Функция 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()
.
Ответ 2
Мартин R ответ с использованием Core Foundation CFStringTransform()
по-прежнему работает, но ключевая функция на самом деле происходит от kCFStringTransformToUnicodeName
, а в Swift 2 мы можем использовать его просто как это, путем соединения с помощью NSString
и вызова stringByApplyingTransform
:
let c: Character = "😄"
if let result = (String(c) as NSString)
.stringByApplyingTransform(
String(kCFStringTransformToUnicodeName),
reverse: false) {
print(result)
}
\n {СМОТРЕТЬ ЛИСТЬЮ С ОТКРЫТЫМ РЯДОМ И СМОТРЕТЬЮ ГЛАЗАМИ}
То же самое для строки:
let s: String = "This is a 😄"
if let result = (s as NSString)
.stringByApplyingTransform(
String(kCFStringTransformToUnicodeName),
reverse: false) {
print(result)
}
Это\N {СМОТРЕТЬ ЛИСТЬЯ С ОТКРЫТЫМ РИТОМ И СМОТРЕТЬЮ ГЛАЗАМИ}
Ответ 3
Свифт 3 версия Эрик Ая ответ:
let s = "This is a 😄"
if let result = s.applyingTransform(
kCFStringTransformToUnicodeName as StringTransform,
reverse: false) {
print(result)
}
Это\N {СМОТРЕТЬ ЛИСТЬЯ С ОТКРЫТЫМ РИТОМ И СМОТРЕТЬЮ ГЛАЗАМИ}