如何扩展接受数组通用元素的类型?

时间:2016-07-23 13:12:15

标签: swift generics swift2 swift-extensions

我有一种类型,我试图专门扩展:AnyObserver<[MyModel]>。如果我没有像Element一样传入数组,那么扩展会很容易,我可以这样做:

extension AnyObserver where Element: MyModel {...}

然而,实际上Element是一个数组,所以我尝试做类似下面的任何一个:

extension AnyObserver where Element: Array<MyModel> {...}
extension AnyObserver where Element: Array<T: MyModel> {...}
extension AnyObserver where Element == Array<MyModel> {...}
extension AnyObserver where Element == [MyModel] {...}

这会导致编译错误,例如:

Same-type requirement makes generic parameter non-generic
Type 'Element' constrained to non-protocol type

为此案例创建扩展名的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

通常,您无法基于特定的类型参数扩展泛型类型。您只能基于协议进行扩展。但在你的特殊情况下,这给了我们一个。只是不需要阵列。需要CollectionType。

extension AnyObserver
    where Element: CollectionType, Element.Generator.Element == MyModel {
}