6

Es gibt eine literale Syntax zum Hinzufügen von Objekten und Ändern von Objekten in einem NSMutableDictionary, gibt es eine literale Syntax zum Entfernen von Objekten?Gibt es die NSMutableDictionary-Literalsyntax zum Entfernen eines Elements?

+1

Nein, gibt es nicht. –

+0

Ich habe es nicht versucht (weg von einem Compiler im Moment), aber was passiert, wenn Sie versuchen, einen Wert auf "Null" zu setzen? 'dict [aKey] = nil;' –

+1

@JoshCaswell Das Speichern von Nil im Wörterbuch führt zum Absturz. – Boon

Antwort

4

Ja, aber ... :-)

Dies ist standardmäßig nicht unterstützt, aber die neue Syntax für Wörterbuch Elemente Einstellung verwendet die Methode setObject:forKeyedSubscript: eher als setObject:forKey:. So können Sie eine Kategorie schreiben, die den ehemaligen ersetzt und entweder setzt oder entfernt das Element:

@implementation NSMutableDictionary (RemoveWithNil) 

- (void) setObject:(id)obj forKeyedSubscript:(id<NSCopying>)key 
{ 
    if (obj) 
     [self setObject:obj forKey:key]; 
    else 
     [self removeObjectForKey:key]; 
} 

@end 

hinzufügen, dass auf Ihre Bewerbung und dann:

dict[aKey] = nil; 

wird ein Element entfernen.

+0

Es ist nett +1. – Avt

+1

Ich wünschte, es wäre auf diese Weise geschrieben worden! –

+1

@JoshCaswell - Fragte, wer das erhöhen könnte. * Offiziell * Apple ermutigen dies nicht, aber verwenden Sie es selbst, um Methoden zu ersetzen ... Was vermieden werden muss, ersetzt die gleiche Methode mit verschiedenen Kategorien, dann sind alle Wetten ab, welche Methode aufgerufen wird; Aber bis Apple das Training selbst beendet, sollte das gut funktionieren. Sie können die Umgebungsvariable 'OBJC_PRINT_REPLACED_METHODS' auf' YES' setzen, um alle Methoden zu sehen, die auf diese Weise ersetzt werden (in Xcode setzen Sie sie im Schema). – CRD

3

Nein. Es gibt keine. Ich habe versucht Beweis Link zu finden, aber nicht gelungen :)

+0

Sie können die LLVM-Seite verknüpfen, die alle Literale auflistet. – Sulthan

0

Ab iOS 9 und Mac OS 10.11, sind diese zwei gleichwertige:

[dictionary removeObjectForKey:@"key"]; 
dictionary[@"key"] = nil; 

die Foundation release notes See.

Verwandte Themen