2017-10-21 1 views
0

Ich möchte eine Erweiterung von ObservableType erstellen, aber der folgende Code nicht kompilieren.RxSwift generische `Kann Wert des Typs nicht konvertieren '(_) -> [Any]' zu erwartetem Argumenttyp '(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())] 
    } 

Es wirft einen Fehler: Cannot convert value of type '(_) -> [Any]' to expected argument type '(String) -> _'

Ich habe keine Ahnung, wo das Problem ist. Vielen Dank im Voraus

Antwort

0

Ihr Problem ist, dass Sie ein Array von zwei verschiedenen Typen zurückgeben - User und Repo. Wenn Sie den Rückgabewert beispielsweise ändern:

return [Observable.just(User()), Observable.just(User())] - es wird wie erwartet funktionieren.

Aktualisiert: In Ihrem Fall können Sie es achive so:

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

Aktualisiert: Korrektere den folgenden Rückgabetyp für foo Funktion zu nutzen - Observable<[C.Element.E]> IMHO.

+0

Wie wäre es, ich möchte gemischte Typen? – akabc

+0

@akabc Ich habe die Antwort aktualisiert –

+0

Ist es möglich, die Funktion 'foo' zu ändern, um den Client-Code ohne Fehler kompilieren zu lassen? – akabc

Verwandte Themen