RxSwift:无法将类型“(_, _, Bool) -> Bool”的值转换为预期的参数类型“(_, _, _) -> _”

RxSwift :Cannot convert value of type '(_, _, Bool) -> Bool' to expected argument type '(_, _, _) -> _'

"signingIn : Observable " 用于进度条,防止用户在我收到 API

的响应之前再次单击按钮
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)
}

因为 validatedUsernamevalidatedPassword 都是 Observable<Bool> 类型,所以在 usernamepassword 上调用 .isValid 可能不会输入检查。

错误在上面一行结束,因为编译器无法推断出 return 类型并更早地抛出一些东西。您可以尝试通过输入传递给 combineLatest.

的参数和 return 类型的闭包来检查您是否得到更好的错误消息
Observable.combineLatest(
        validatedUsername,
        validatedPassword,
        signingIn.asObservable()
    )   { (username: Bool, password: Bool, signing: Bool) -> Bool in    
  return username.isValid && password.isValid && !signing
}

现在抛出的错误应该更明显,这个修复可能就像删除 .isValid 调用一样简单

return username && password && !signing