Déclarant NSDictionary et mettez la valeur de la clé de la paire en Swift?
J'ai essayé de déclarer un NSDictionary avec le type de classe de la clé et de la valeur comme ceci :
var catAndSubCatDict: NSDictionary<Category, Array<SubCategory>> = NSDictionary<Category, Array<SubCategory>>()
Ici, "Catégorie" et "sous-catégorie" sont les classes. Je sais que je ne peux pas utiliser un type de classe pour le champ de clé. Cependant, je dois réaliser cela de toute façon. Est-il possible de faire cela ? Comment puis-je déclarer spécialisé NSDictionary ou des choses similaires à ce faire ?
En outre, j'utilise ce dictionnaire comme ceci :
for(var i=0; i<resultJson.count; i++)
{
let subCategoryItemList = resultJson.objectAtIndex(i) as NSDictionary
let categoryItem = subCategoryItemList.valueForKey(WSConstants.CATEGORY_OBJ) as NSDictionary
var category: Category = Category()
category.categoryId = categoryItem.valueForKey(WSConstants.CATEGORY_ID) as Int
category.categoryName = categoryItem.valueForKey(WSConstants.NAME) as String
var subCategoryList: Array<SubCategory> = []
let jsonSubCategoryList = subCategoryItemList.allKeysForObject(WSConstants.SUBCATEGORY_LIST_OBJ) as NSArray
for(var i=0; i<jsonSubCategoryList.count; i++)
{
let subCategoryObj = jsonSubCategoryList.objectAtIndex(i) as NSDictionary
var subCategory: SubCategory = SubCategory()
subCategory.subCategoryId = subCategoryObj.valueForKey(WSConstants.SUBCATEGORY_ID) as Int
subCategory.subCategoryName = subCategoryObj.valueForKey(WSConstants.NAME) as String
subCategory.subCategoryType = subCategoryObj.valueForKey(WSConstants.SUBCATEGORY_TYPE) as Int
subCategoryList.append(subCategory)
}
self.catAndSubCatDict.setValue(category, forkey: subCategoryList) //Also, I have to achieve this
}
Merci pour vos réponses,
En ce qui concerne meilleur
Vous devez vous connecter pour publier un commentaire.
NSDictionary
ne pas soutien des génériques, de sorte que vous ne pouvez pas déclarer de cette façon - si vous voulez l'utiliser, il instancier comme suit:Swift fournit un nouveau type de dictionnaire, qui prend en charge les génériques, et de le créer, vous n'avez qu'à remplacer
NSDictionary
avecDictionary
dans votre code:ou utiliser l'une de ces formes compactes:
Noter que dans tous les cas mentionnés ci-dessus, vous pouvez utiliser l'inférence de type et de raccourcir le code en supprimant le type de variable:
Dernier, avec swift dictionnaires vous peut utiliser une classe comme clé - ce que vous devez faire est de rendre les clés de la classe (
Category
dans votre code) de mettre en œuvre laHashable
etEquatable
protocoles[Category: [SubCategory]]
.NSDictionary
, utilisezdict.setValue(value: value, forKey: key)
, pour une swift dictionnaire utilisez simplementdict[key] = value