①や⑩というのを丸囲み文字と呼ぶようです。数値から丸囲み文字に変換する必要があったので調べてみました。
⓪, ①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩, ⑪,⑫,⑬,⑭,⑮,⑯,⑰,⑱,⑲,⑳, ㉑,㉒,㉓,㉔,㉕,㉖,㉗,㉘,㉙,㉚, ㉛,㉜,㉝,㉞,㉟,㊱,㊲,㊳,㊴,㊵, ㊶,㊷,㊸,㊹,㊺,㊻,㊼,㊽,㊾,㊿,
数字を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),") } }
追記:⓪もあった
@ch3cooh あと 0 → ⓪ がない
— 𝙄 𝙖𝙢 𝙢𝙤𝙣𝙤𝙩𝙤𝙣𝙚. (@mntone) 2015年5月29日
1〜50までしかないと思い込んでました。0を指定された場合でも丸囲み文字に変換するように修正しました。