В Swift есть важное различие между типами и литералами.
Как вы сказали, [1, 2] - это массив литерал .Не массив.Литерал массива - это в основном то, что может быть использовано для создания любого типа, который соответствует ExpressibleByArrayLiteral.
Вы можете использовать литерал массива для создания массива, но вы можете использовать его для создания других типов, таких как IndexSets.
С printIndexSet([1, 2])
вы используете литерал массива для создания IndexSet.
И printIndexSet(Array<Int>([1,2]))
выдает ошибку, потому что ваша функция ожидает IndexSet в качестве аргумента, а не Array.Надеюсь, это поможет!
Обновление:
Как правильно заметил @rmaddy в комментариях под моим ответом, IndexSet соответствует SetAlgebra, что соответствует ExpressibleByArrayLiteral.Вот почему вы можете использовать литерал массива для создания IndexSet.