2017-03-12 16 views
0

"signingIn: Observable" steht für den Fortschrittsbalken und für verhindern, dass der Benutzer auf die Schaltfläche erneut klicken, bevor ich die Antwort von der APIRxSwift: Kann den Wert vom Typ '(_, _, Bool) -> Bool' nicht in den erwarteten Argumenttyp konvertieren '(_, _, _) -> _'

let validatedUsername: Observable<Bool> 
let validatedPassword: Observable<Bool> 
var signingIn : Observable<Bool> // Is signing process in progress 
let signupEnabled: Observable<Bool> //Is signup button enabled 

validatedUsername = input.username 
     .map { username in 
      return username.characters.count > 5 
     } 
     .shareReplay(1) 

validatedPassword = input.password 
     .map { password in 
      return password.characters.count > 5 
     } 
     .shareReplay(1) 

signupEnabled = Observable.combineLatest(
     validatedUsername, 
     validatedPassword, 
     signingIn.asObservable() 
    ) { username, password , signing in //the error at this line 

     username.isValid && 
      password.isValid && 
      !signing 
     } 
     .distinctUntilChanged() 
     .shareReplay(1) 
} 

Antwort

0

Da validatedUsername und validatedPassword bekommen Observable<Bool> sind beide vom Typ, ruft .isValid auf username und password wahrscheinlich nicht Prüfung nicht geben.

Der Fehler endet in der obigen Zeile, da der Compiler den Rückgabetyp nicht ableiten kann und etwas früher ausgibt. Sie können versuchen, zu überprüfen, ob Sie eine bessere Fehlermeldung erhalten, indem Sie die Parameter eingeben und den Typ des Abschlusses zurückgeben, der an combineLatest übergeben wurde.

Observable.combineLatest(
     validatedUsername, 
     validatedPassword, 
     signingIn.asObservable() 
    ) { (username: Bool, password: Bool, signing: Bool) -> Bool in  
    return username.isValid && password.isValid && !signing 
} 

Der Fehler sollte deutlicher und dieses Update ist wahrscheinlich der .isValid Ruf als das Entfernen so einfach sein, jetzt hinausgeworfen

return username && password && !signing 
+0

Dank tomahh für Ihre Antwort! – Marian

Verwandte Themen