0

バージョン 3 の ReactiveCocoa の使用に問題があります。ログイン ビュー コントローラー用のビュー モデルを構築したいと考えています。私のView Controllerには、パスワードテキストフィールド用のアウトレットがあります:

@IBOutlet weak var passwordTextField: UITextField!

ビューモデルには、パスワードであるテキストのプロパティがあります

public let emailText = MutableProperty<String>("")

問題は、それをどのように結合するかです。テキスト フィールドから SignalProducer を取得できます。

emailTextField.rac_textSignal().toSignalProducer()

しかし、それを emailText プロパティにバインドする方法は? SignalProducer はSignal ではないというドキュメントを読みましたが、現在は作成できます。メソッド start() がありますが、パラメーターとして Sink を使用するため、現時点では設計について少し混乱しています。emailText をシンクにするべきではありませんか?

4

1 に答える 1

0

注:これはあなたの質問に対する適切な回答ではありませんが、役立つと思います。

ビューをビュー モデルにバインドするだけの場合は、この問題に対するワンクラス ソリューションを提供するこの投稿を読むことをお勧めします。

そこから、双方向バインディングを非常に簡単に実装できるため、ビューが変更されるたびにビューモデルが更新され、その逆も同様です。ここに私の拡張機能があります:

class TwoWayDynamic<T> {
    typealias Listener = T -> Void
    private var viewListener: Listener?
    private var controllerListener: Listener?
    private(set) var value: T

    func setValueFromController(value: T) {
        self.value = value
        viewListener?(value)
    }

    func setValueFromView(value: T) {
        self.value = value
        controllerListener?(value)
    }

    func setValue(value: T) {
        self.value = value
        controllerListener?(value)
        viewListener?(value)
    }

    init(_ v: T) {
        value = v
    }

    func bindView(listener: Listener?) {
        self.viewListener = listener
    }

    func bindController(listener: Listener?) {
        self.controllerListener = listener
    }

    func bindViewAndFire(listener: Listener?) {
        self.viewListener = listener
        listener?(value)
    }

    func bindControllerAndFire(listener: Listener?) {
        self.controllerListener = listener
        listener?(value)
    }
}

それが役に立てば幸い!

于 2015-08-30T10:23:26.753 に答える