我想创建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) -> _'
我不知道问题出在哪里。提前致谢
答案 0 :(得分:0)
您的问题是您返回了两种不同类型的数组 - User
和Repo
。如果将返回值更改为此值,例如:
return [Observable.just(User()), Observable.just(User())]
- 它会按预期工作。
更新:在您的情况下,您可以这样做:
[Observable<Any>.just(User()), Observable<Any>.just(Repo())]
已更新:更正确使用foo
函数的以下返回类型 - Observable<[C.Element.E]>
恕我直言。