Est-il possible de convertir le contenu d'un NSMutableArray en un vecteur std :: vector? Et si oui, cela devrait-il être fait dans le code Objective-C ou C++?NSMutableArray to std :: vector
1
A
Répondre
1
Vous pouvez créer un vecteur avec n'importe quel type Objective-C.
Par exemple, pour stocker une instance NSString dans un vecteur, vous pouvez utiliser le code suivant:
NSMutableArray<NSString*>* array = [@[@"1", @"2"] mutableCopy];
__block std::vector<NSString*> vectorList;
[array enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
vectorList.push_back(obj);
}];
for (std::vector<NSString*>::const_iterator iterator = vectorList.cbegin(); iterator != vectorList.cend(); iterator++)
{
NSLog(@"%@", *iterator);
}
Vous devriez l'utiliser dans les fichiers Objective-C++, parce que C++ ne pas la syntaxe pour les fichiers Objective-C (avec mm extension).
Si vous devez convertir une donnée dans NSMutableArray en une représentation différente, par exemple NSNumber en int ou NSString en std :: string, vous devez la créer à la main.
Oui, c'est possible. Vous utiliseriez un transtypage de pontage sur chaque élément du tableau mutable vers un pointeur vide et le stockeriez dans le fichier 'std :: vector'. Exemples: https://stackoverflow.com/questions/7298912/convert-nsdictionary-to-stdvector?rq=1 Cela devrait être fait dans le fichier Objective-C++ .mm bien sûr. – Brandon
Merci beaucoup. Vos commentaires ont été en mesure de me lancer. – Pibomb
@Brandon, désolé mais vous pouvez utiliser des modèles d'Objective-C++ pour créer, spécification à tout type Objective-C. Par exemple: std :: set, std :: vector <__ NSObject faible>>. Le second conteneur va stocker les références faibles. –