Sto cercando una classe in Objective C simile a KeyValuePair di C# (anche senza i generici). Solo tutto ciò che ha un primo/secondo oggetto. Posso creare il mio senza alcun problema, ma capisco se uno è già lì, quindi non c'è bisogno di reinventare la ruota. Non ho avuto fortuna trovandone uno io ... Qualcuno ne conosce uno?Obiettivo C - Classe KeyValuePair?
risposta
Quindi fondamentalmente come una mappa di hash, giusto?
Esempio da here:
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
// Add objects to a dictionary indexed by keys
[dictionary setObject:@"A Book about the Letter A" forKey:@"A"];
[dictionary setObject:@"A Book about the Letter B" forKey:@"B"];
[dictionary setObject:@"A Book about the Letter C" forKey:@"C"];
// Retrieve an object from a dictionary with a key
NSLog([dictionary objectForKey:@"B"]);
// Release a dictionary
[dictionary release];
Cosa succede ad usare le strutture semplici C? È "più veloce" rispetto alla scrittura di un'intera classe.
typedef struct KeyValuePair {
const char *key;
const char *value;
} KeyValuePair;
//init like this
KeyValuePair kvp = {"yourkey", "yourvalue"}
cose da tenere a mente:
- Structs sono passati per valore.
- ARC impedisce l'utilizzo di oggetti ObjC con le strutture ma i primitivi C sono ancora supportati.
- Non è possibile aggiungere strutture alle classi di raccolta ObjC (NSArray, NSDictionary, ecc.).
Sfortunatamente C struct non funziona bene con ARC e non puoi metterli in NSArray/NSDictionary e in molti altri posti. è quasi inutile –
@BryanChen true, ma se hai bisogno di una sorta di contenitore da passare senza dover creare e tutta la classe, le strutture possono comunque essere utili. ARC impedisce l'utilizzo di oggetti ObjC con le strutture ma i primitivi C sono ancora supportati. –
lo stai effettivamente facendo in modo più C/C++ invece di ObjC way. –
Che ne dici di un semplice NSArray?
NSArray* kvp = [NSArray arrayWithObjects: key, value, nil];
// or, using boxed literals,
NSArray* kvp = @[key, value];
...
NSObject* key = [kvp firstObject];
NSObject* value = [kvp lastObject];
Si potrebbe fare una funzione per avvolgere +arrayWithObjects:
(e gestire il caso di una chiave nullo o di valore che potrebbero inciampare l'approccio semplice)
Accesso agli elementi di un NSArray sarà probabilmente più veloce di un NSDictionary.
- 1. Classe C++ con amico obiettivo-
- 2. Xcode 6 creando nuova Classe C obiettivo
- 3. Converti Elenco dei KeyValuePair in IDictionary "C#"
- 4. KeyValuePair Covariance
- 5. Obiettivo c - qualcosa come c?
- 6. KeyValuePair VS DictionaryEntry
- 7. Creare istanza di classe obiettivo-c per nome?
- 8. Come chiamare un metodo obiettivo di classe C a Swift
- 9. Obiettivo C NSStack e NSQueue?
- 10. in c obiettivo
- 11. Implementazione obiettivo-c Blowfish
- 12. Obiettivo C: Confrontando CGPoints
- 13. Obiettivo API Volunteermatch C
- 14. KeyValuePair in Lambda expression
- 15. Obiettivo C - Variabile statica e globale?
- 16. Implementare Obiettivo del protocollo C a Swift
- 17. Obiettivo c - Conteggio di riferimento
- 18. Controlla per inf - obiettivo c
- 19. Obiettivo-C uso di puntatori
- 20. % segno nella stringa c obiettivo
- 21. CGContextFillRects: Invalid contesto - Obiettivo C
- 22. galleggia dichiarando nel c obiettivo
- 23. Obiettivo c - Indentazione del testo
- 24. Obiettivo semplice-c Richiesta GET
- 25. Ottenere immagini dall'URL Obiettivo C
- 26. Stampa array in obiettivo-c?
- 27. Pulsante Elimina iOS - Obiettivo C
- 28. obiettivo c init nel protocollo
- 29. L'impostazione predefinita per KeyValuePair
- 30. Posso passare delegato come parametro obiettivo-c
In questo modo, ma solo una singola istanza (hashmap/dizionario contiene più chiavi/valori). Sto cercando una classe che sia solo una singola chiave/valore. – Kyle
Si potrebbe prendere in considerazione solo la creazione della propria classe "coppia". In alternativa, è possibile sottoclasse NSMutableDictionary e applicare una regola di una sola coppia di oggetti nel dizionario sottoclasse alla volta. Sembra strano che non ci sia un qualche tipo di oggetto "NSPair" standard ... – PixelCloudSt