NSArray indexOfObjectPassingTestの使用に関するいくつかの例を見てきましたが、それらを機能させることができませんでした(有効なインデックスを返さない)。だから今、私はインラインブロックを使用しようとしています。ブロックをtypedefし、それをプロパティとして設定し、合成し、コンストラクターで初期化することで、これを実行しました。ただし、この種の方法では、メソッドを簡単に作成して代わりに使用できるため、ポイント全体がミュートになります(入力が少なくて済み、労力も少なくて済みます)。
私が達成しようとしているのは、これに沿った何かです。
Observations *obs = [self.myAppointment.OBSERVATIONS objectAtIndex: ^NSInteger (NSString *keyword){
for (Observations *obs in self.myAppointment.OBSERVATIONS) {
if ([obs.TIME isEqualToString:keyword] == YES) return (NSInteger)[self.myAppointment.OBSERVATIONS indexOfObject:obs];
}
return (NSInteger)-1;
}];
ただし、Xcodeにはそれがありません。さまざまなバリエーションを試しましたが、インラインで宣言するのは問題のようです。これは奇妙なことです。これは、前述のように、タイプ定義、宣言、および合成が次のように機能するためです。
Observations *obs = [self.myAppointment.OBSERVATIONS objectAtIndex:findObs(keyword)];
ここでも、findObsは、同じことを行う定義済みのブロックです。これは構文の問題ですか、それとももっと重要な何かが欠けていますか?