これは、Objective-C のほぼ新しいスーパーセットのように見えます。ドット表記とディレクティブ (例:studentsInClassA.@union.studentsInClassB.pets(...)
およびコンプライアンス構文 (例: ) が混在しています) の組み合わせが使用されています-replaceObjectIn<Key>AtIndex:withObject:
。KVC の大部分は単純なアクセサ メソッドに似ており、とにかく合成できるようです。ただし、KVObserving は MVC アプリをより簡単にするようです。意見?
1 に答える
キーと値のコーディングにより、ID が実行時にのみ認識される、任意にネストされた属性を検索できます。たとえば、KVC は適切な代替手段ではありませんperson.name
— そのような特定のタスクには不必要に一般的です。しかし、プログラムを作成しているときに、名前、年齢、またはお気に入りの靴のブランドを調べたいかどうかわからなかったとしましょう。NSTableView データ ソースでは、このような問題によく遭遇します。必要なメッセージを送信するために大きくて反復的な条件文を書くこともできますが、KVC を使用すると簡単にできます。
return [personController.selectedPerson valueForKeyPath:desiredAttribute];
次に、orに設定desiredAttribute
すると、実行時に必要な属性しかわからなくても、分岐せずに正しい値を取得できます。@"name"
@"age"
@"favoriteShoeBrand.name"
クラスが特別な方法で KVC を処理できるため、これも便利です。たとえば、NSArray は非常に優れた機能を備えています。[arrayOfPeople valueForKeyPath:@"name"]
は同等ではありませんarrayOfPeople.name
— 代わりに、キーパスを各オブジェクトに渡し、その結果で新しい配列を作成します。したがって、他の多くの言語の map 関数とほぼ同じ目的を果たします。@distinctUnionOfArrays
(配列のコレクションを取り、重複を無視してそれらをマージする)などの特別な KVC 演算子もあります。
KVO に関して言えば、これは何かが変化したときに通知を受け取る方法にすぎません。たとえば、UI が誕生日のロジックを知る必要なく、人の誕生日に新しい年齢で UI を更新できます。それがあなたにとって便利に思えるなら、あなたはおそらくそれを気に入るはずです.