Swift で同じ型の要素だけを扱うタプルの要素数を数える

Swift プログラミング

Swift で同じ型の要素で構成されたタプルを受け取ったときに、その要素数がいくつあるかを数える関数を作ってみました。


以前に こちら で、すべての要素が CChar型 で構成されたタプルを配列に変換する話をしましたが、その中で『タプルの要素の数が分かってる』前提で UnsafeBufferPointer<CChar> を生成しました。

ただ、たとえばジェネリック関数を使って引数にタプルを受け取ったときなど、場合によってはタプルの要素数がわからない場合も考えられます。

そこで、同じ型の要素だけを持ったタプル限定で、そのタプルの要素数を取得する関数を作成してみることにしました。

同じ型だけを扱うタプルの要素数を取得する

タプルの要素数を数えるために、扱う型のサイズを取得する typeof 関数を使います。

func countOfUniformTuple<Tuple,U>(p:Tuple, withType type:U.Type) -> Int {
	
	return sizeof(Tuple) / sizeof(type)
}

このようにして、最初の引数に渡されたタプルの全体サイズを、次の引数に渡された型のサイズで割ってあげることで、想定した型で何個分のタプルであるかを判定できる様子でした。

あくまでも、第一引数にはタプル型の値が渡されて、そのタプルのすべての要素が、第二引数で渡された型と一致しているときに限って正しく動くようになっています。それ以外の場合では間違った答えを返すので、注意して使う必要があります。