1

データ バインディングは素晴らしい抽象化です。私は AngularJS で常にこれを使用しており、アプリをよりシンプルにしています。データ バインディングを広範囲に使用する iOS アプリ (この場合はゲーム) を作成しようとしていますが、KVO に悩まされています。Objective-C のより良いデータ バインディングを実装するライブラリはどれですか? 具体的には、次のことを行う必要があります。

  • 弱い参照があるため、dealloc をオーバーライドする必要はありません
  • バインディングの起動を延期する: 関数でプロパティを複数回設定すると、一度起動します
  • バインディングの起動を延期する: 関数に複数のバインドされたプロパティを設定すると、すべてが設定されるまで待ってから起動します (したがって、順序は関係ありません)。
  • より良い構文: すべてのオブザーバーをくっつけないでください (大きな if-else が必要です)
  • より良い構文: ブロックを使用しますか?
4

2 に答える 2

3

Reactive Cocoa はすばらしく見えます: https://github.com/blog/1107-reactivecocoa-for-a-better-world

#2 と #3 を満たすかどうかを判断するのに十分な試みはしていませんが、そうであることを願っています。

于 2013-05-24T19:50:26.677 に答える
0

https://github.com/mutech/aka-ios-beaconをご覧ください。

(#1) については、XAML や HTML バインディングと同じように使用します。バインド式は、検査可能なプロパティを使用して Interface Builder で定義されます (コードで実行できますが、MVVM の目的の多くを無効にします)。そのため、KV 観測を設定または管理する必要はありません。透過的に (そして確実に) 行われます。

Beacon は、バインディングがターゲットとその特定のニーズを認識できるように、ほとんどのビューを拡張します。更新頻度について心配する必要はありません。複雑なバインド (fe TableView データ ソース) の場合、アニメーションがスムーズになり、不要な作業が回避されるように、ビジュアルの更新は通常延期されます。繰り返しますが、すべてではないにしてもほとんどの場合、これは透過的です。ただし、これが本当に#2と#3に答えるかどうかはわかりません。

より良い構文: インターフェイス ビルダー プロパティでバインド式を定義することにより、バインドをセットアップします。たとえば、UILabel テキスト バインディングの単純なバインディング式は次のようになります。

currentPerson.name

ラベルのより複雑なバインディングは次のようになります。

account.amount { numberFormatter: { numberStyle: $enum.CurrencyStyle } }

テーブル ビュー データ ソースの非常に複雑なバインディングは、次のような匂いがします。

[
  arrayForFirstSection { headerTitle: "First Section" },
  fetchedResultsForSecondSection { headerTitle: "Second Section" }
] {
  cellMapping: { [ 
    { predicate: <MyModelClass1>, cellIdentifier: "Model1Cell" },
    { predicate: "SELF < $value" { value: 0 }, cellIdentifier: "NegativeNumberCell"}
  ] }
}

それが恐ろしく見える場合は、テーブル ビューをリンクするために必要な作業はこれだけであることに注意してください。UITableViewDataSource と UITableViewDelegate はバインディングによって実装されます。ただし、デリゲート メソッドを提供し、ほとんど制限なくテーブルビューを調整することはできます。

ビュー コントローラーは、ビューのバインディング式で参照している (キー値のコーディングに準拠した) プロパティを提供するだけです。

于 2016-03-13T17:06:05.747 に答える