Objective-C Language
NSDictionary
Recherche…
Syntaxe
@{ valeur clé, ... }
[NSDictionary dictionaryWithObjectsAndKeys: value, key, ..., nil];
dict [ clé ] = valeur ;
id value = dict [ clé ];
Remarques
La classe NSDictionary déclare l'interface programmatique aux objets qui gèrent des associations immuables de clés et de valeurs. Utilisez cette classe ou sa sous-classe NSMutableDictionary lorsque vous avez besoin d'un moyen pratique et efficace pour récupérer des données associées à une clé arbitraire. NSDictionary crée des dictionnaires statiques et NSMutableDictionary crée des dictionnaires dynamiques. (Pour plus de commodité, le terme dictionnaire fait référence à toute instance de l'une de ces classes sans spécifier son appartenance à une classe exacte.)
Une paire clé-valeur dans un dictionnaire est appelée une entrée. Chaque entrée se compose d'un objet qui représente la clé et d'un second objet qui correspond à la valeur de cette clé. Dans un dictionnaire, les clés sont uniques. C'est-à-dire que deux clés d'un même dictionnaire ne sont pas égales (comme déterminé par isEqual :). En général, une clé peut être n'importe quel objet (à condition qu'elle soit conforme au protocole NSCopying — voir ci-dessous), mais notez que lors de l'utilisation du codage, la clé doit être une chaîne (voir Principes fondamentaux du codage). Ni une clé ni une valeur ne peuvent être nulles; Si vous devez représenter une valeur nulle dans un dictionnaire, vous devez utiliser NSNull.
NSDictionary est «sans frais ponté» avec son homologue Core Foundation, CFDictionaryRef. Reportez-vous à la section Pontage sans frais pour plus d'informations sur les passerelles sans frais.
Créer des littéraux
NSDictionary *inventory = @{
@"Mercedes-Benz SLK250" : @(13),
@"BMW M3 Coupe" : @(self.BMWM3CoupeInventory.count),
@"Last Updated" : @"Jul 21, 2016",
@"Next Update" : self.nextInventoryUpdateString
};
Création à l'aide de 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
doit être passé comme dernier paramètre en tant que sentinelle indiquant la fin.
Il est important de se rappeler que lors de l'instanciation des dictionnaires, les valeurs passent en premier et les clés en second. Dans l'exemple ci-dessus, les chaînes sont les clés et les nombres sont les valeurs. Le nom de la méthode reflète également ceci: dictionaryWithObjectsAndKeys
. Bien que cela ne soit pas incorrect, la manière la plus moderne d’instancier les dictionnaires (avec les littéraux) est préférable.
Créer à l'aide de plists
NSString *pathToPlist = [[NSBundle mainBundle] pathForResource:@"plistName"
ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:pathToPlist];
Définition d'une valeur dans NSDictionary
Il existe plusieurs façons de définir l'objet d'une clé dans un NSDictionary, correspondant aux manières dont vous obtenez une valeur. Par exemple, pour ajouter une lamborghini à une liste de voitures
la norme
[cars setObject:lamborghini forKey:@"Lamborghini"];
Tout comme n'importe quel autre objet, appelez la méthode de NSDictionary qui définit un objet d'une clé, objectForKey:
Veillez à ne pas confondre ceci avec setValue:forKey:
c'est pour une chose complètement différente, Key Value Coding
Sténographie
cars[@"Lamborghini"] = lamborghini;
C'est la syntaxe que vous utilisez pour les dictionnaires dans la plupart des autres langages, tels que C #, Java et Javascript. C'est beaucoup plus pratique que la syntaxe standard, et sans doute plus lisible (surtout si vous codez dans ces autres langages), mais bien sûr, ce n'est pas standard . Il est également disponible uniquement dans les nouvelles versions d'Objective C
Obtenir une valeur de NSDictionary
Il existe plusieurs façons d'obtenir un objet à partir d'un NSDictionary avec une clé. Par exemple, pour obtenir une lamborghini d'une liste de voitures
la norme
Car * lamborghini = [cars objectForKey:@"Lamborghini"];
Tout comme n'importe quel autre objet, appelez la méthode de NSDictionary qui vous donne un objet pour une clé, objectForKey:
Veillez à ne pas confondre ceci avec valueForKey:
c'est pour une chose complètement différente, Key Value Coding
Sténographie
Car * lamborghini = cars[@"Lamborghini"];
C'est la syntaxe que vous utilisez pour les dictionnaires dans la plupart des autres langages, tels que C #, Java et Javascript. C'est beaucoup plus pratique que la syntaxe standard, et sans doute plus lisible (surtout si vous codez dans ces autres langages), mais bien sûr, ce n'est pas standard . Il est également disponible uniquement dans les nouvelles versions d'Objective C
Vérifiez si NSDictionary a déjà une clé ou non
Objectif 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
}