Если вы хотите иметь только уникальные опции без заботы об аргументах, просто измените свою функцию. Чтобы иметь возможность передавать только интересующие опции, вы можете использовать значения по умолчанию + опции, если вы вообще не хотите использовать опции:
func gimme(first: CGFloat? = nil, second: CGFloat? = nil, third: Bool? = nil, ...)
gimme(third: True)
func gimme(first: CGFloat = 0, second: CGFloat = 0, third: Bool = false, ...)
gimme(second: 10.2)
Если вы хотите иметь возможность передавать свои параметры между объектами, оберните их в структуру:
struct GimmedArguments {
var first: CGFloat?
var second: CGFloat?
var third: Bool?
}
func gimme(the arguments: GimmedArguments) { ... }
Может быть проблематично отловить во время компиляции, поскольку как вы будете обрабатывать, когда используются переменные вместо простых значений:
gimme(the: var1, var2, var3)
Вы можете попытаться написать некоторые swiftlint
правила или пользовательский скрипт, но ИМХО это может быть излишним.
Вместо этого вы можете добавить проверку во время выполнения как:
func myFunction(array: [Int]) {
precondition(Set(array).count == array.count, "Array should not contain same elements")
}
Если вы просто хотите убедиться, что ваша функция вызывается с элементами uniq, используйте Set
. Будет гарантировано, что все элементы уникальны.