literals nsset nsorderedset

literals - ¿Objetivos literales de C para NSSet y NSOrderedSet?



(2)

¿Qué operaciones de NSSet y NSOrderedSet se pueden realizar con los nuevos literales de la colección Objective-C?

Para NSArray, NSDictionary y NSNumber, consulte here .

FWIW, esta publicación de Big Nerd Ranch dice que la sintaxis de indexación debe funcionar para NSOrderedSet. Pero en mis pruebas no lo hace. Y no he podido encontrar nada sobre la creación de conjuntos ordenados.


¿Qué hay de intentar esto, en caso de NSSet:

#define $(...) [NSSet setWithObjects:__VA_ARGS__, nil]

Y usándolo así:

NSSet *addresses = $(addr1,addr2,addr3,addr4);

;-)


No hay sintaxis literal de Objective-C para NSSet. Realmente no tiene sentido usar subíndices de índice para acceder a los elementos de NSSet, a pesar de que los subíndices basados ​​en claves podrían hacerlo. Ya sea envolviendo o subclasificando, puede agregar el suyo propio.

(Corrección): Originalmente pensé que NSOrderedSet tampoco era compatible, pero resulta que se admite el uso de subíndice de índice, pero no parece haber una manera de inicializar un NSOrderedSet con la sintaxis literal. Sin embargo, puede usar initWithArray: y pasar una matriz literal:

NSMutableOrderedSet* oset = [[NSMutableOrderedSet alloc] initWithArray: @[@"a", @"b", @"c", @"d", @42]]; oset[2] = @3; NSLog(@"OrderedSet: %@", oset);

Salidas:

OrderedSet: {( a, b, 3, d, 42 )}

De acuerdo con esta excelente publicación de Mike Ash, puede agregar los métodos que se utilizan para admitir subíndices indexados a sus propios objetos.

- (id)objectAtIndexedSubscript:(NSUInteger)index; - (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;

Y métodos similares para la codificación basada en objetos:

- (id)objectForKeyedSubscript: (id)key; - (void)setObject: (id)obj forKeyedSubscript: (id)key;

Por lo tanto, podría implementar un contenedor (o, con un poco más de trabajo, subclasificarlo) alrededor de un NSSet y proporcionar recuperación basada en claves. ¡Guay!