2

配列が次の形式で表される場合、ネット上の多くの場所で、さらにはアップルのドキュメントでも見ました。

@[obj1,obj2]

たとえば; 述語プログラミングガイドには、次のようなステートメントがあります。

NSCompoundPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[greaterThanPredicate, lessThanPredicate]];

しかし、同じものをコードで書くと、「プログラム内の予期しない@」(予想どおり)コンパイラエラーが発生します。これは配列を表すための単なる方法ですか、それとも何かが足りないのですか?

4

1 に答える 1

11

これは比較的新しい構文であり、clang3.3以降を含むXcodeでのみ使用できます。

これ

@[greaterThanPredicate, lessThanPredicate]

論理的にはこれと同等です*

[NSArray arrayWithObjects:greaterThanPredicate, lessThanPredicate, nil]

機能を失うことなく、いつでも新しい構文を古い構文に置き換えることができます。

編集( Nikolai Ruheによるコメントに応えて)Appleはオープンソースバージョンとは異なるバージョンスキームを持っています。この機能を導入した正しいバージョン番号は、Apple 4.0、clang3.1です。


*内部では、新しい構文の配列初期化子が。の呼び出しに変換されますarrayWithObjects:count:訂正してくれたnewacctに感謝します。

于 2013-03-07T18:12:06.877 に答える