0

ReactiveCocoa4 を使用して、基本的なログイン機能をプロジェクトに追加しています。viewModel に「username」と「password」の MutableProperties を設定し、それらを viewController の関連する textField にバインドしました。ここまでは順調ですが、ネットワーク リクエストを実行するためのアクションの設定に行き詰まっています。基本的に、アクションが入力タプル (ユーザー名: 文字列、パスワード: 文字列) を取得し、カスタム ユーザー オブジェクト 'SBUser' を出力するようにしたいと考えています。また、ユーザー名とパスワードの入力に対していくつかの基本的な検証を行い、それをアクションの有効な状態に関連付けます。私のviewModelコードは以下です。

final class AuthenticationVM {

let client: Client
let authenticationType: AuthenticationType
let username = MutableProperty<String>("")
let password = MutableProperty<String>("")
let loginAction: Action<(username: String, password: String), SBUser, Error>

init(client: Client, authenticationType: AuthenticationType) {
    self.client = client
    self.authenticationType = authenticationType

    let validation = combineLatest(username.producer, password.producer)
            .map({ (username, password) -> Bool in
                return username.characters.count > 2 && password.characters.count > 2 })
            .skipRepeats()

    loginAction = Action<(username: String, password: String), SBUser, Error>(enabledIf: validation) { (username: String, password: String) in
        return SignalProducer<SBUser, Error> { [unowned self] observer, _ in
            self.client.request(API.logInWithUsername(username, password: password)) { response in
                        switch response.result {
                        case .Success(let user):
                            observer.sendNext(user)
                        case .Failure(let error):
                            observer.sendFailed(error)
                        }
            }
        }
    }
}

}

エラーが発生しました。コンテキスト クロージャ タイプ ' ->SignalProducer< ,_>' は 1 つの引数を必要としますが、2 つがクロージャ本体で使用されました。このようなタプルをアクションの入力に渡すことはできませんか?

4

2 に答える 2

1
loginAction = Action<(username: String, password: String), SBUser, Error>(enabledIf: MutableProperty(validation)) { (username: String, password: String) in
        return SignalProducer<SBUser, Error> { [unowned self] observer, _ in
            self.client.request(API.logInWithUsername(username, password: password)) { response in
                switch response.result {
                case .Success(let user):
                    observer.sendNext(user)
                case .Failure(let error):
                    observer.sendFailed(error)
                }
            }
        }
    }

検証を可変プロパティに型キャストすると、機能しますenabledIf: MutableProperty(validation)

于 2016-03-21T06:04:34.133 に答える