Zoeken…


Syntaxis

  • @{ sleutel waarde, ... }

  • [NSDictionary dictionaryWithObjectsAndKeys: value, key, ..., nihil];

  • dict [ key ] = waarde ;

  • id waarde = dict [ sleutel ];

Opmerkingen

De klasse NSDictionary verklaart de programmatische interface voor objecten die onveranderlijke associaties van sleutels en waarden beheren. Gebruik deze klasse of de subklasse NSMutableDictionary wanneer u een handige en efficiënte manier nodig hebt om gegevens op te halen die aan een willekeurige sleutel zijn gekoppeld. NSDictionary maakt statische woordenboeken en NSMutableDictionary maakt dynamische woordenboeken. (Voor het gemak verwijst de term woordenboek naar elk exemplaar van een van deze klassen zonder het exacte klassenlidmaatschap op te geven.)

Een sleutel / waarde-paar in een woordenboek wordt een invoer genoemd. Elk item bestaat uit één object dat de sleutel vertegenwoordigt en een tweede object dat de waarde van die sleutel is. Binnen een woordenboek zijn de sleutels uniek. Dat wil zeggen dat geen twee sleutels in een enkel woordenboek gelijk zijn (zoals bepaald door isEqual :). Over het algemeen kan een sleutel elk object zijn (op voorwaarde dat deze voldoet aan het NSCopy-protocol - zie hieronder), maar houd er rekening mee dat bij gebruik van sleutel / waarde-codering de sleutel een string moet zijn (zie Basiswaardecodering). Noch een sleutel, noch een waarde kan nul zijn; als u een nulwaarde in een woordenboek moet vertegenwoordigen, moet u NSNull gebruiken.

NSDictionary is "gratis overbrugd" met zijn Core Foundation-tegenhanger, CFDictionaryRef. Zie Gratis bruggen voor meer informatie over gratis bruggen.

Creëren met behulp van literals

NSDictionary *inventory = @{
    @"Mercedes-Benz SLK250" : @(13),
    @"BMW M3 Coupe" : @(self.BMWM3CoupeInventory.count),
    @"Last Updated" : @"Jul 21, 2016",
    @"Next Update"  : self.nextInventoryUpdateString
};

Maken met behulp van dictionaryWithObjectsAndKeys:

NSDictionary *inventory = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:13], @"Mercedes-Benz SLK250",
    [NSNumber numberWithInt:22], @"Mercedes-Benz E350",
    [NSNumber numberWithInt:19], @"BMW M3 Coupe",
    [NSNumber numberWithInt:16], @"BMW X6",
    nil];

nil moet worden doorgegeven als de laatste parameter als een schildwacht die het einde aangeeft.

Het is belangrijk om te onthouden dat bij het instantiëren van woordenboeken op deze manier de waarden eerst en de sleutels als tweede gaan. In het bovenstaande voorbeeld zijn de tekenreeksen de toetsen en zijn de cijfers de waarden. De naam van de methode weerspiegelt dit ook: dictionaryWithObjectsAndKeys . Hoewel dit niet onjuist is, heeft de modernere manier om woordenboeken (met letterlijke woorden) te instantiëren de voorkeur.

Maken met behulp van plists

NSString *pathToPlist = [[NSBundle mainBundle] pathForResource:@"plistName" 
    ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:pathToPlist];

Een waarde instellen in NSDictionary

Er zijn meerdere manieren om het object van een sleutel in een NSDictionary in te stellen, die overeenkomen met de manieren waarop u een waarde krijgt. Bijvoorbeeld om een lamborghini toe te voegen aan een lijst met auto's

Standaard

[cars setObject:lamborghini forKey:@"Lamborghini"];

Roep net als elk ander object de methode van NSDictionary aan die een object van een sleutel objectForKey: , objectForKey: Zorg ervoor dat u dit niet verwart met setValue:forKey: dat is iets heel anders, Key Value Coding

steno

cars[@"Lamborghini"] = lamborghini;

Dit is de syntaxis die u gebruikt voor woordenboeken in de meeste andere talen, zoals C #, Java en Javascript. Het is veel handiger dan de standaardsyntaxis en aantoonbaar leesbaarder (vooral als u in deze andere talen codeert), maar het is natuurlijk niet standaard . Het is ook alleen beschikbaar in nieuwere versies van Objective C

Waarde krijgen van NSDictionary

Er zijn meerdere manieren om een object uit een NSDictionary te halen met een sleutel. Bijvoorbeeld om een lamborghini uit een lijst met auto's te halen

Standaard

Car * lamborghini = [cars objectForKey:@"Lamborghini"];

Roep net als elk ander object de methode NSDictionary aan die u een object voor een sleutel geeft, objectForKey: Zorg ervoor dat u dit niet verwart met valueForKey: dat is iets heel anders, Key Value Coding

steno

Car * lamborghini = cars[@"Lamborghini"];

Dit is de syntaxis die u gebruikt voor woordenboeken in de meeste andere talen, zoals C #, Java en Javascript. Het is veel handiger dan de standaardsyntaxis en aantoonbaar leesbaarder (vooral als u in deze andere talen codeert), maar het is natuurlijk niet standaard . Het is ook alleen beschikbaar in nieuwere versies van Objective C

Controleer of NSDictionary al een sleutel heeft of niet

Doelstelling C:

   //this is the dictionary you start with. 
 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"name1", @"Sam",@"name2", @"Sanju",nil];

//check if the dictionary contains the key you are going to modify.  In this example, @"Sam"
if (dict[@"name1"] != nil) {
    //there is an entry for Key name1       
}
else {
    //There is no entry for name1       
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow