問題タブ [reactive-cocoa-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4073 参照

ios - ReactiveCocoa 3 を使用して基本的な UITextField 入力 + UIButton アクション シナリオを実装する方法は?

私は Swift と ReactiveCocoa の初心者でもあります。MVVM と Reactive Cocoa v3.0-beta.4 フレームワークを使用して、このセットアップを実装し、新しい RAC 3 フレームワークの基本を学びたいと思います。

テキスト フィールドがあり、検証のためにテキスト入力に 3 文字以上を含める必要があります。テキストが検証に合格すると、下のボタンが有効になります。ボタンがタッチダウン イベントを受け取ったら、ビュー モデルのプロパティを使用してアクションをトリガーしたいと考えています。

現時点では RAC 3.0 ベータ版に関するリソースがほとんどないため、フレームワークの Github リポジトリの QA を読んで、次のことを実装しました。これが私がこれまでに思いついたものです:

ViewModel.swift

ViewController.swift

RACUtilities.swift

この設定では、ビュー モデルのテキストが 3 文字を超える場合にボタンが有効になります。ユーザーがボタンをタップすると、ビュー モデルのアクションが実行され、戻り値を true として取得できます。ここまでは順調ですね。

私の質問は: ビュー モデルのアクション内で、保存されたテキスト プロパティを使用し、それを使用してネットワーク リクエストを行うようにコードを更新したいと考えています。したがって、View Controller 側からの入力は必要ありません。Action プロパティへの入力を要求しないようにするにはどうすればよいですか?

0 投票する
1 に答える
3684 参照

swift - ReactiveCocoa 3 および 4 で基本的なバインディングを作成する方法

私は最近 ReactiveCocoa v3 を読んでいて、基本的なものを設定するだけで苦労しています。私はすでに変更ログ、テスト、いくつかの SO の質問、およびこの件に関する Colin Eberhardt の記事を読みました。ただし、基本的なバインディングの例はまだありません。

その日のメニューを表示するアプリがあるとします。アプリは RAC3 と MVVM パターンを使用しています。

モデル(メニュー)

このモデルには、今日のメニューを取得するための簡単なメソッドが 1 つあります。今のところ、これはネットワーク リクエストを行わず、基本的にはモデル オブジェクトを作成するだけです。mainCourseプロパティはString.

ビューモデル (MenuViewModel)

ビュー モデルはString、ビュー コントローラーにメニューを表示させるためのさまざまな変数を公開します。メインコースを表示するためのプロパティを 1 つだけ追加しましょう。

そして、このプロパティのバインディングを追加します:

ViewController (MenuViewController)

最後になりましたが、このメイン コースをビューで紹介したいと思います。これに a を追加しますUILabel

text最後に、ビュー モデルを観察して、その UILabelのプロパティを設定したいと思います。次のようなもの:

残念ながらこれは機能しません。

質問

  1. このメソッドfetchTodaysMenu()は を返しますが、代わりにSignalProducer<Menu, NoError>このメソッドが を返すようにしたい場合はどうすればよいでしょうか? SignalProducer<Menu, NSError>これにより、メソッドがエラーを返す可能性があるため、ビュー モデルでのバインディングが失敗します。どうすればこれを処理できますか?
  2. 前述のように、ビュー コントローラーの現在のバインディングが機能しません。のプロパティMutablePropertyを表すを作成して遊んでいますが、うまくいきませんでした。また、バインドしたいプロパティごとに追加の変数を作成しなければならないのは、ぎこちなく、冗長に感じると思います。これは RAC2 では必要ありませんでした。私も意図的に の使用を避けようとしましたが、そうすべきではないでしょうか? 私は基本的に、正しいやり方を見つけたいだけです。textUILabelDynamicPropertyRAC(self.headline, text) = RACObserve(self.viewModel, mainCourse);

この基本的なセットアップを行う方法に関するその他のフィードバック/ガイダンスは大歓迎です。

0 投票する
1 に答える
975 参照

ios - 「SignalProducer」を変換するにはどうすればよいですか" から "SignalProducer" ReactiveCocoa 3 の?

Action<AnyObject?, Bool, NSError>ReactiveCocoa 3のインスタンスを作成してみました。

このコードはエラーでコンパイルできません'SignalProducer<Bool, NoError>' is not convertible to 'SignalProducer<Bool, NSError>'

SignalProducer<Bool, NoError>に変換するにはどうすればよいSignalProducer<Bool, NSError>ですか?

0 投票する
1 に答える
1454 参照

ios - ReactiveCocoa (Swift) で NSError SignalProducer を NoError SignalProducer に変換する方法

私は a を持つモデルを持っており、それが押されたときにそのプロパティを反転する必要MutableProperty<Bool>があるUIButton(ctaTopButton) を持っています。たとえば、クリックすると true が false になり、その逆も同様です。

私はこのように設定しています:

私の問題の核心は、マップが変換するrac_signalForControlEvents(...).toSignalProducer()a を返すことから来ていますSignalProducer<AnyObject?, NSError>SignalProducer<Bool, NSError>

ただし、中置演算子<~は でのみ機能するSignalProducer<Bool, NoError>ため、プロデューサーを何らかの方法で変換する必要があります。

私の質問は、エラーを降格させるにはどうすればよいですか? promoteErrorsに変換NoErrorするための があることは知っていNSErrorます。また、イニシャライザがないmapErrorため、 のインスタンスを取得する方法がわかりませNoErrorん。

0 投票する
1 に答える
154 参照

swift - 機能コードを書くときのグローバル関数の利点は何ですか

私は Swift 開発者で、コードに機能的/反応的なスタイルを採用しようとしています。ReactiveCocoa私はすべてのプロジェクトで使用しておりRAC 3.0、試してみました。私が見たことの 1 つは、プロジェクトでは、グローバル スコープを持つ (つまり、インスタンスに関連付けられていない) カリー化された関数が多用されていることです。

私が理解したいのは、なぜグローバル関数が良い考えなのかということです.

これはカリー化された関数に固有のものですか、それとも関数型プログラミングの一般的な属性ですか?

0 投票する
1 に答える
63 参照

ios - Static TableView のコントロールにリンクされたアウトレットは初期化されません

マスター詳細ナビゲーションをセットアップしようとしています。ストーリーボードを使用します。マスターは動的テーブルで、詳細は静的テーブルです。 絵コンテ コントローラーのアウトレットとして nameLabel をセットアップしましたが、viewDidLoad でそれにアクセスしようとすると、まだ nil に設定されています。

prepareForSegue を使用する代わりに、次のように詳細ビューをプッシュする didSelectRowAtIndexPath を使用しました (TableViewBindingHelper を使用しているため、https: //github.com/ColinEberhardt/ReactiveTwitterSearch/tree/master/ReactiveTwitterSearch/Util を参照)

レッスンビューコントローラー:

どうすればこれを修正できますか?

私が見た他のサンプルコードは、 init(coder aDecoder: NSCoder) コンストラクターを呼び出すセグエでナビゲーションを実行し、すべてのアウトレットは既に初期化されています。

0 投票する
1 に答える
226 参照

objective-c - ReactiveCocoa/RACSignal を使用して、didFinishLaunchingWithOptions のような UIApplicationDelegate ライフサイクル イベントを "RACify" するにはどうすればよいですか?

ReactiveCocoaライブラリを使用してRACライフUIApplicationDelegateサイクルイベントをどのように処理するのか疑問に思っています。

最も重要なのは- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsであるため、ここから始めるのが理にかなっているように思えます。

私が正しく理解している場合、基本的な考え方はRACSignal、イベントをカプセル化する を作成し (アプリケーションはこれらのオプションで起動を終了します)、パイプラインを介してシリアルに送信するか、複数の「アプリケーション開始ハンドラー」に並行して送信し、すべてをマージすることです。それらの出力 - シリアルの場合は、それぞれが を返したときにのみ続行し、YESパラレルの場合はif (handler1 == YES && handler2 == YES ...)- そしてreturn結合された応答を実際のUIApplicationDelegate.

しかし、これがどのように達成されるかについての正確な詳細については、私は曖昧です。

実際のコードまたは単なる疑似コードのいずれかの例は、非常に高く評価されます。それは私(そしておそらく他の人)にとって二重の目的を果たします:1)述べられたもの、および2)RAC非UI主導のイベントをどのように変更するかの例を提供します(まあ、それは正確には真実ではありませんが、私は思うあなたは私が何を意味するか分かります)。