そのため、アイテムの量を変えることができる配列があります。とにかくNSArray
の最後のオブジェクトを取得できるかどうか疑問に思っていました。 int
カウンターを使用して配列内のアイテムの量を追跡することを考えましたが、これは面倒です。
とにかく、これよりも優れている人はいますか?
質問を少し広げると、配列の最後のオブジェクトを取得するさまざまな方法で必要になる場合がいくつかあります。
標準のCocoaプログラムの中でオブジェクトを取得したいだけの場合は、次のようにします。
[myArray lastObject]
カウンターの懸念に対処するために、自分自身を実装する必要もありません:
NSUInteger myCount = [myArray count];
KVCを介して配列の最後のオブジェクトにアクセスする必要がある場合、ストーリーには少し説明が必要です。
最初に、配列から通常のキーの値を要求します配列内のオブジェクトごとにそのキーの値で構成される新しい配列を作成します。つまり、配列からキーlastObject
を要求すると、配列は、キーlastObject
を使用して各オブジェクトにvalueForKey:
を送信します。意図した結果ではないこととは別に、例外もスローする可能性があります。
そのため、(内容ではなく)配列自体に本当にキーを送信する必要がある場合、キーの前に@
- signを追加する必要があります。これは、キーがその内容ではなく配列自体を対象としていることを配列に伝えます。
そのため、キーは@lastObject
という形式で、次のように使用する必要があります。
NSArray *arr = @[@1, @2, @3];
NSNumber *number = [arr valueForKey: @"@lastObject"];
実際のプログラムでこのキーを使用する方法の例は、配列の配列を各内部配列のlastオブジェクトでソートする必要がある状況です。
上記のキーは、ソート記述子で単純に使用されます。
NSArray *arrayOfArrays = @[@[@5, @7, @8], @[@2, @3, @4, @6], @[@2, @5]];
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @"@lastObject" ascending: YES];
NSArray *sorted = [arrayOfArrays sortedArrayUsingDescriptors: @[sd]];
同様に、配列の配列をフィルタリングするために、キーを述部で直接使用できます。
NSPredicate *pred = [NSPredicate predicateWithFormat: @"self.@lastObject > 5"];
NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred];
self
- partを省略したい人は、単に@"@lastObject > 5"
という形式を使用できます
[yourArray lastObject];
ドキュメント を参照してください
たぶんこのように:
id object = [myArray lastObject];
良いヒントは、ドキュメントを読みたいシンボルをオプションクリックすることです。たとえば、オプションキーを押しながら、XcodeエディターでNSArray
と書かれているテキストをクリックします。
基本を備えた素敵なポップアップと、詳細なドキュメントへのリンクが表示されます。
またはあなたが空想を得たい場合:
yourArray.lastObject