多种类型约束

时间:2016-09-28 18:07:22

标签: swift generics parameters protocols

有没有办法将参数约束到多个约束?具体而言,该对象可以是Decodable协议或具有通用Decodable的Array。

所以这样:

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

我尝试过像这样接近它,使用具有多个约束的泛型,但它需要两者都是protocals,而Array不是。此外,这可能是AND约束,而不是MartinR指出的OR:

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

失败,因为数组不是协议。有没有办法将参数约束为两种类型之一,其中一种不是协议?

我试图避免在运行时抛出错误的检查,我可以做,但对我来说似乎是不好的做法。

1 个答案:

答案 0 :(得分:-1)

调用方法时可以使用if语句。然后有两个不同版本的方法(每种类型的约束一个),并根据您需要使用的约束,调用适当的方法。