Come ottenere un buon grip su NSMutableDictionary, NSEnumerator, NSMutableSet?
-
11-10-2019 - |
Domanda
Sono po 'indietro nella conoscenza su questi tre temi: NSMutableDictionary
, NSEnumerator
, NSMutableSet
. Quando voglio usarli, ci si sente molto duro, anche quando ho passato attraverso la documentazione per gli sviluppatori.
Esiste un codice di esempio per capire chiaramente per tutti e tre gli argomenti?
Si prega di aiutare me.
Grazie, Madan Mohan.
Soluzione
Il modo migliore per capire questi dipende da ciò che la vostra esperienza precedente è. NSDictionary
è esattamente quello che sembra: un dizionario. Ciò significa che data una chiave (o un lemma , come in un dizionario), è possibile cercare un valore (o definizione ):
Per esempio, questo dizionario fornisce informazioni circa il mio cane:
KEY VALUE
-------------------------------------------
@"name" @"tucker"
@"species" @"canis lupus familiaris"
@"favorite" @"biscuits"
Con un dogInfo
dizionario contenente tali informazioni, potremmo trasmettere [dogInfo objectForKey:@"name"]
e si aspettano di ricevere @"tucker"
.
La differenza tra NSDictionary
e NSMutableDictionary
è che quest'ultimo permette modifiche dopo l'inizializzazione. Questo ti permette di fare le cose come [dogInfo setObject:@"fetch" forKey:@"game"]
. Questo è utile per mantenere lo stato, memoizing richieste referenzialmente trasparenti, ecc.
NSSet
è un modo di avere un gruppo di oggetti, con alcuni bit importanti: non esiste un ordine definito a quegli oggetti, e non ci può essere solo uno di ciascun oggetto (duplicati). Utilizzare NSSet
per quando si ha bisogno di contenere unici, oggetti non ordinate. NSMutableSet
è la variante di NSSet
che consente cambi (come l'aggiunta o la rimozione di oggetti) dopo l'inizializzazione.
NSEnumerator
è un po 'più complicato, ma di solito non avrà bisogno di trattare con esso a meno che non si sta scrivendo le proprie librerie, esegue la codifica arcaico, o sta facendo enumerazioni complesse. Sottoclassi di NSEnumerator
sono utilizzati da classi collezione, come NSDictionary
, NSArray
e NSSet
, per consentire il loro oggetto essere enumerati. Di solito, si era appena enumerare su di loro con un foreach
-ciclo, dal momento che tutti implementano <NSFastEnumeration>
. Ma a volte, ti consigliamo di fare le cose più specifiche, come enumerate nel corso degli oggetti (invece dei tasti) di un dizionario, o enumerare su un array in senso inverso. Questo è dove le istanze di NSEnumerator
(di solito definita come proprietà sui vostri oggetti da collezione) diventerà disponibile.
Aggiorna
Justin nei commenti ha sottolineato che si conforma a NSEnumerator
<NSFastEnumeration>
; che i mezzi, le probabilità sono vicino-a-nulla che avrete bisogno di sapere come utilizzare un NSEnumerator
; si può solo fare un ciclo foreach
sopra l'enumeratore in sé, in questo modo:
for (id object in [dogDict objectEnumerator]) {
// doing something with the object, disregarding its key
}