2016-09-28 6 views
1

Есть ли способ набрать параметр ограничивать параметр более чем одним ограничением? В частности, объект может быть протокола Decodable или Array с общим Decodable.Множественные ограничения типов

Так как это:

func myFunc(obj:Decodable, Array<Decodable>) 

Я попытался подходя к нему, как это, используя общий с несколькими ограничениями, но это требует как быть protocals, что массив не является. Кроме того, это, вероятно, ап и ограничение, а не OR, как указывая на MartinR:

func myFunc<T where T:Decodable, T:Array<Decodable>>(obj:T) 

Это терпит неудачу, потому что массив не является протоколом. Есть ли способ ограничить параметр одним из двух типов, где один не является протоколом?

Я пытаюсь избежать проверки, которая вызывает ошибку во время выполнения, что я могу сделать, но для меня это кажется плохим.

+0

Я пробовал это раньше и никогда не нашел способ сделать это. Не сказать, что это невозможно, но я не смог найти способ. –

+0

Вы не можете ограничить параметр 'T1' * или *' T2', ни для типов, ни для протоколов. –

+0

@MartinR Вы можете использовать протоколы, описанные выше, где, корректируя для ясности – steventnorris

ответ

-1

Вы можете использовать оператор if при вызове метода. Затем используйте две разные версии метода (по одному для каждого типа ограничений) и в зависимости от того, какое ограничение необходимо использовать, вызовите соответствующий метод.

+0

К сожалению, это либо этот, либо сложный общий метод, который отражает его собственный тип объекта. – steventnorris

Смежные вопросы