Slack APIの絵文字名からSwiftの文字(列)を生成したい
※ 厳密にはSlack APIをたたいてるのではなく、Slackの管理画面からエクスポートしたアーカイブデータのJSONを扱っているのだが、たぶん内容は同じなのでこういうタイトルにした。
やりたいこと
Slack では、たとえば "🤫" という絵文字は、 `:shushing_face:` という名前で扱われる。
この絵文字名から、SwiftのCharactor / String を生成したい。
Unicode.Scalar を使う?
ChatGPTに聞くと、UnicodeScalar(Unicode.Scalar の typealias)を使って次のように初期化できる、という
let emojiName = "shushing_face"
let emojiScalar = UnicodeScalar(emojiName)
let emoji = Character(emojiScalar!)
しかしこのコードの UnicodeScalar の生成結果は nil になる。
絵文字の名前がiOS/macOS環境だと違うのだろうかと次のようなコードで出力してみたところ、
let emojiStr = "🤫"
// https://stackoverflow.com/posts/54915809/revisions
for scalar in emojiStr.unicodeScalars {
print(scalar.properties.name)
}
"🤫" は、"FACE WITH FINGER COVERING CLOSED LIPS" という名前のようだった。
しかしそもそも、ChatGPTは嘘をついていて、Unicode.Scalar は絵文字名から直接初期化することはできず、次のように Unicode スカラーの値を渡す必要がある:
let emojiUnicodeScalar = UnicodeScalar(0x1F92B)
let emojiCharacter = Character(emojiUnicodeScalar!)
Swiftには絵文字名から直接Character / Stringを生成する方法はないようだ。
どう解決したか
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/