見出し画像

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を生成する方法はないようだ。

どう解決したか

ここから先は

857字
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/