2017-06-18 2 views
1

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

+0

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

+0

Merci beaucoup. Vos commentaires ont été en mesure de me lancer. – Pibomb

+0

@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. –

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.