2017-10-21 138 views
0

我想创建一个ObservableType的扩展,但下面的代码不会编译。RxSwift generic'不能将类型'(_) - > [Any]'的值转换为期望的参数类型'(String) - > _'`

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

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

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

更新:在你的情况,你可以achive这么:

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

更新时间:更正确使用下面的返回类型为foo功能 - Observable<[C.Element.E]>恕我直言。

+0

我想混合类型? – akabc

+0

@akabc我更新了答案 –

+0

是否可以修改'foo'函数以使客户端代码无错地编译? – akabc

相关问题