2016-09-28 19 views
1

入力する方法は複数の制約にパラメータを制約していますか?具体的には、オブジェクトは、プロトコルDecodableまたは一般的なDecodableを持つ配列である可能性があります。複数の型制約

ので、このように:

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

私は複数の制約でジェネリックを使用して、このようにそれに近づいて試してみたが、それはされていない配列、protocalsすることの両方が必要です。また、これはOR制約ではなく、ORではなく、MartinRが指摘しているとおりです。

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

これは配列がプロトコルではないため失敗します。パラメータが2つのタイプのうちの1つになるように制約する方法はありますか?

私は実行時にエラーをスローするチェックを避けようとしていますが、それは私には悪い習慣のようです。

+0

私は以前これを試したことがありますし、それを行う方法が見つかりませんでした。それはできないとは言えませんが、私は方法を見つけることができませんでした。 –

+0

型やプロトコルのために、パラメータを 'T1' *や*' T2'に制約することはできません。 –

+0

@MartinR上記を使用して、明快に調整するプロトコルを使用することができます – steventnorris

答えて

-1

メソッドが呼び出されたときにifステートメントを使用できます。次に、メソッドの2つの異なるバージョン(各タイプの制約に1つ)を使用し、使用する必要のある制約に応じて、適切なメソッドを呼び出します。

+0

残念なことに、これは、これ自身のオブジェクトタイプを反映した、これまたは複雑な汎用メソッドです。 – steventnorris