如何扩展接受数组通用元素的类型?
How to extend type that accepts generic elements of array?
我有一个类型要专门扩展: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
为这种情况创建扩展的正确方法是什么?
通常,您不能基于特定类型参数扩展泛型类型。您只能基于协议进行扩展。但在你的特殊情况下,这给了我们一个机会。只是不需要数组。需要 CollectionType。
extension AnyObserver
where Element: CollectionType, Element.Generator.Element == MyModel {
}
我有一个类型要专门扩展: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
为这种情况创建扩展的正确方法是什么?
通常,您不能基于特定类型参数扩展泛型类型。您只能基于协议进行扩展。但在你的特殊情况下,这给了我们一个机会。只是不需要数组。需要 CollectionType。
extension AnyObserver
where Element: CollectionType, Element.Generator.Element == MyModel {
}