プロトコルについて勉強をしていますが、何かもう一つ理解ができません。
下記は、数値の範囲をコードポイントと見立てて、指定されたコードポイントを文字に表示する
関数をジェネリックにしたいと思っています。
指定された数値を、Int型にして、コードポイントに変換して表示しようと思っていますが、
条件の立て方が分かりません。下記のコードでは、T型をIntegerプロトコル適合したところで、Intのイニシャライザでは、どの型になるのか(またはIntegerプロトコルから作成した型を独自に作成した場合もある)が分からないので、コンパイルが通らないことは理解できました。
が、問題が解決できません。UInt8,UInt16,UInt32,Int型に対応したいと思っています。

func codePointToMoji<T:Integer>(_ range:CountableClosedRange<T>)->Void{

    for c in range
    {
         let codePoint = Int(c)
         let d = UnicodeScalar(codePoint) 
         if let s = d{
            print(s)
         }
    }
}


var a = (0 as UInt8)...71
var b = (48165 as UInt16)...48170
var c = 0x0300...0x036F



codePointToMoji(a)
codePointToMoji(b)
codePointToMoji(c)