RxSwift泛型`无法转换类型的值'(_) - > [任意]'预期参数类型'(字符串) - > _'`

时间:2017-10-21 05:52:10

标签: swift generics rx-swift

我想创建ObservableType的扩展名,但以下代码无法编译。

public extension ObservableType {
  public func foo<C: Collection>(_ calls: @escaping (E) -> C) -> Observable<[Any]> where C.Iterator.Element: ObservableType {
    return flatMap { input in Observable.zip(calls(input)) { objects in objects }
    }
  }
}

// compile error
Observable.just("foo")
  .foo { foo in
    [Observable.just(User()), Observable.just(Repo())]
  }

它会抛出错误:Cannot convert value of type '(_) -> [Any]' to expected argument type '(String) -> _'

我不知道问题出在哪里。提前致谢

1 个答案:

答案 0 :(得分:0)

您的问题是您返回了两种不同类型的数组 - UserRepo。如果将返回值更改为此值,例如:

return [Observable.just(User()), Observable.just(User())] - 它会按预期工作。

更新:在您的情况下,您可以这样做:

[Observable<Any>.just(User()), Observable<Any>.just(Repo())]

已更新:更正确使用foo函数的以下返回类型 - Observable<[C.Element.E]>恕我直言。