【问题标题】:How to extend type that accepts generic elements of array?如何扩展接受数组通用元素的类型?
【发布时间】:2016-07-23 13:12:14
【问题描述】:

我有一个我正在尝试专门扩展的类型: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

为这种情况创建扩展的正确方法是什么?

【问题讨论】:

    标签: swift generics swift2 swift-extensions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多