読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Swiftで数字をUnicodeScalarクラスを使って①や⑩の丸囲み文字に変換する

①や⑩というのを丸囲み文字と呼ぶようです。数値から丸囲み文字に変換する必要があったので調べてみました。

⓪,
①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,
⑪,⑫,⑬,⑭,⑮,⑯,⑰,⑱,⑲,⑳,
㉑,㉒,㉓,㉔,㉕,㉖,㉗,㉘,㉙,㉚,
㉛,㉜,㉝,㉞,㉟,㊱,㊲,㊳,㊴,㊵,
㊶,㊷,㊸,㊹,㊺,㊻,㊼,㊽,㊾,㊿,

0から50までのInt型の値をUnicodeScalarクラスを使って、⓪から㊿までのString型に変換してみましょう。これらの数値は何故かコード上に並んでいるわけではなくて点在しています。

private func convertEnclosedNumber(num: Int) -> String? {
    if num < 0 || 50 < num {
        return nil
    }
        
    var char: String? = nil
    if 0 == num {
        var ch = 0x24ea
        char = String(UnicodeScalar(ch))
    } else if 0 < num && num <= 20 {
        var ch = 0x2460 + (num - 1)
        char = String(UnicodeScalar(ch))
    } else if 21 <= num && num <= 35 {
        var ch = 0x3251 + (num - 21)
        char = String(UnicodeScalar(ch))
    } else if 36 <= num && num <= 50 {
        var ch = 0x32b1 + (num - 36)
        char = String(UnicodeScalar(ch))
    }
    return char
}

convertEnclosedNumberメソッドを使って最初に書いた出力するためのサンプルコードです。

for n in 0..<51 {
     if let num = convertEnclosedNumber(n) {
         print("\(num),")
     }
}

追記:⓪もあった

1〜50までしかないと思い込んでました。0を指定された場合でも丸囲み文字に変換するように修正しました。

関連記事