>>2
頑張ってジェネリクスにするよりも関数オーバーロードの方が見かけはシンプルに書けるよ
ただ、バイトオーダー変換が必要な処理は強烈にビット長を意識するべき処理な訳で
そこをビット長汎用化する意味があるのかという所の方が問題なきがする
ま「詰めSwift」と言うお遊びの中での解の一つとして

func bth(_ v:UInt16)->UInt16{return UInt16(bigEndian: v)}
func bth(_ v:UInt32)->UInt32{return UInt32(bigEndian: v)}
func bth(_ v:UInt64)->UInt64{return UInt64(bigEndian: v)}
func bth(_ v:UInt)->UInt{return UInt(bigEndian: v)}

func lth(_ v:UInt16)->UInt16{return UInt16(littleEndian: v)}
func lth(_ v:UInt32)->UInt32{return UInt32(littleEndian: v)}
func lth(_ v:UInt64)->UInt64{return UInt64(littleEndian: v)}
func lth(_ v:UInt)->UInt{return UInt(littleEndian: v)}