struct Hoge<T> { func foo(_ values: T...) { } } struct Fuga<T...>{ func foo(_ values: T...) { } } Hoge<Int>().foo(a, b, c, ...) // a, b, c...は全部Intでなければならない、数は自由 Fuga<Int, String, Float>().foo(a, b, c) // a, b, cはInt, STring, Floatでなければならない、数は3つ固定