問題タブ [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.
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 プロパティへの入力を要求しないようにするにはどうすればよいですか?
swift - ReactiveCocoa 3 および 4 で基本的なバインディングを作成する方法
私は最近 ReactiveCocoa v3 を読んでいて、基本的なものを設定するだけで苦労しています。私はすでに変更ログ、テスト、いくつかの SO の質問、およびこの件に関する Colin Eberhardt の記事を読みました。ただし、基本的なバインディングの例はまだありません。
その日のメニューを表示するアプリがあるとします。アプリは RAC3 と MVVM パターンを使用しています。
モデル(メニュー)
このモデルには、今日のメニューを取得するための簡単なメソッドが 1 つあります。今のところ、これはネットワーク リクエストを行わず、基本的にはモデル オブジェクトを作成するだけです。mainCourse
プロパティはString
.
ビューモデル (MenuViewModel)
ビュー モデルはString
、ビュー コントローラーにメニューを表示させるためのさまざまな変数を公開します。メインコースを表示するためのプロパティを 1 つだけ追加しましょう。
そして、このプロパティのバインディングを追加します:
ViewController (MenuViewController)
最後になりましたが、このメイン コースをビューで紹介したいと思います。これに a を追加しますUILabel
。
text
最後に、ビュー モデルを観察して、その UILabelのプロパティを設定したいと思います。次のようなもの:
残念ながらこれは機能しません。
質問
- このメソッド
fetchTodaysMenu()
は を返しますが、代わりにSignalProducer<Menu, NoError>
このメソッドが を返すようにしたい場合はどうすればよいでしょうか?SignalProducer<Menu, NSError>
これにより、メソッドがエラーを返す可能性があるため、ビュー モデルでのバインディングが失敗します。どうすればこれを処理できますか? - 前述のように、ビュー コントローラーの現在のバインディングが機能しません。のプロパティ
MutableProperty
を表すを作成して遊んでいますが、うまくいきませんでした。また、バインドしたいプロパティごとに追加の変数を作成しなければならないのは、ぎこちなく、冗長に感じると思います。これは RAC2 では必要ありませんでした。私も意図的に の使用を避けようとしましたが、そうすべきではないでしょうか? 私は基本的に、正しいやり方を見つけたいだけです。text
UILabel
DynamicProperty
RAC(self.headline, text) = RACObserve(self.viewModel, mainCourse);
この基本的なセットアップを行う方法に関するその他のフィードバック/ガイダンスは大歓迎です。
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>
ですか?
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
ん。
swift - 機能コードを書くときのグローバル関数の利点は何ですか
私は Swift 開発者で、コードに機能的/反応的なスタイルを採用しようとしています。ReactiveCocoa
私はすべてのプロジェクトで使用しておりRAC 3.0
、試してみました。私が見たことの 1 つは、プロジェクトでは、グローバル スコープを持つ (つまり、インスタンスに関連付けられていない) カリー化された関数が多用されていることです。
私が理解したいのは、なぜグローバル関数が良い考えなのかということです.
これはカリー化された関数に固有のものですか、それとも関数型プログラミングの一般的な属性ですか?
ios - Static TableView のコントロールにリンクされたアウトレットは初期化されません
マスター詳細ナビゲーションをセットアップしようとしています。ストーリーボードを使用します。マスターは動的テーブルで、詳細は静的テーブルです。 コントローラーのアウトレットとして nameLabel をセットアップしましたが、viewDidLoad でそれにアクセスしようとすると、まだ nil に設定されています。
prepareForSegue を使用する代わりに、次のように詳細ビューをプッシュする didSelectRowAtIndexPath を使用しました (TableViewBindingHelper を使用しているため、https: //github.com/ColinEberhardt/ReactiveTwitterSearch/tree/master/ReactiveTwitterSearch/Util を参照)
レッスンビューコントローラー:
どうすればこれを修正できますか?
私が見た他のサンプルコードは、 init(coder aDecoder: NSCoder) コンストラクターを呼び出すセグエでナビゲーションを実行し、すべてのアウトレットは既に初期化されています。
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主導のイベントをどのように変更するかの例を提供します(まあ、それは正確には真実ではありませんが、私は思うあなたは私が何を意味するか分かります)。