Je vous facilite la tâche. J'ajoute un nouveau fichier C ++ à mon projet Objective C, le renomme en .mm, puis crée une classe C ++ standard à l'intérieur. Ensuite, je crée une méthode de classe statique dans la section "public:" pour une fonction C ++ qui prend une NSString et renvoie une NSString (ou NSArray, si c'est ce que vous voulez). Je convertis ensuite NSString en C ++ std :: string comme ceci:
// If anyone knows a more efficient way, let me know in the comments.
// The "if" condition below is because ObjC crashes if converting to
// std::string if the string is nil or empty.
// assume #include <string>
std::string s = "";
if (([sInput != nil]) && (!([sInput isEqualTo:@""]))) {
std::string sTemp([sInput UTF8String]);
s = sTemp;
}
À partir de là, je peux utiliser regex_replace comme ceci:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
Ensuite, je peux reconvertir cette std :: string en une NSString avec:
NSString *sResponse2 = @(sResult.c_str());
Si vous n'utilisez ce C ++ que pour cette fonction, vous trouverez peut-être approprié d'appeler ce fichier extra.mm (nom de classe Extra) et de placer cette méthode de classe statique, puis d'ajouter d'autres méthodes de classe statique lorsque la situation se présente où il est logique de le faire en C ++ car c'est moins compliqué dans certains cas. (Il y a des cas où ObjC fait quelque chose avec moins de lignes de code, et certains cas où C ++ le fait avec moins de lignes de code.)
PS Encore une autre façon avec ceci est d'utiliser un fichier .mm mais de créer un wrapper Objective C autour de l'utilisation de std :: string et std :: regex_replace () (ou regex_match ()).