2017-10-21 139 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

相關問題