2017-10-21 13 views
0

ObservableTypeの拡張を作成したいが、コンパイル。RxSwiftジェネリック型 '(_) - > [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の2種類の配列を返すことです。戻り値をこの値に変更すると、たとえば:

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

関連する問題