Ich habe ein paar Beispiele um NSArray indexOfObjectPassingTest gesehen, aber ich konnte sie nicht arbeiten lassen (sie würden keinen gültigen Index zurückgeben). So, jetzt versuche ich einen Inline-Block zu verwenden. Ich habe es getan, indem ich einen Block typedefiniert habe, ihn dann als Eigenschaft definiert, synthetisiert und im Konstruktor initialisiert habe. Aber diese Art von macht den ganzen Punkt stumm, wie ich leicht eine Methode erstellen und stattdessen verwenden könnte (weniger Tippen, weniger Aufwand).Suche nach einem Objekt-Index in NSArray mit einem Inline-Block
Was ich versuche zu erreichen ist etwas entlang dieser:
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;
}];
jedoch Xcode einfach wird es nicht haben. Ich habe verschiedene Varianten ausprobiert, aber es scheint Deklarieren inline ein Problem zu sein, was seltsam ist, weil, wie ich gesagt habe, typedefing es, zu erklären und zu synthetisieren es wie folgt funktioniert:
Observations *obs = [self.myAppointment.OBSERVATIONS objectAtIndex:findObs(keyword)];
Wo findObs ist wieder ein definierter Block, der das Gleiche tut. Ist das ein Syntaxproblem, oder fehlt mir noch etwas Wichtigeres?
Dank toll gearbeitet. Ich nehme also an, dass das Übergeben eines Inline-Blocks als NSInteger-Parameter (der im Wesentlichen erwartet, dass der Rückgabewert des Blocks als Parameter übergeben wird) nicht machbar ist, es sei denn, sein Typ ist definiert und synthetisiert? –
Sie können Ihren Block auch in-line aufrufen: '[... ObjektAtIndex: (^ NSInteger (NSString * k) {...}) (Schlüsselwort)];', aber die Dinge beginnen ein bisschen chaotisch. –
Dieses Beispiel gibt das letzte Objekt zurück, das den Test im Array bestanden hat. Um die Iteration zu stoppen, sobald das erste Objekt gefunden wird, müssen Sie '* stop' auf' YES' setzen. – Moose