Lo rendo facile. Aggiungo un nuovo file C ++ al mio progetto Objective C, lo rinomino come .mm e quindi creo una classe C ++ standard all'interno. Quindi, creo un metodo di classe statica nella sezione "public:" per una funzione C ++ che accetta un NSString e restituisce un NSString (o NSArray, se è quello che vuoi). Quindi converto NSString in C ++ std :: string in questo modo:
// 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;
}
Da lì, posso usare regex_replace in questo modo:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
Quindi, posso riconvertire quella stringa std :: string in una NSString con:
NSString *sResponse2 = @(sResult.c_str());
Se stai usando questo C ++ solo per questa funzione, potresti trovare adatto chiamare questo file extra.mm (nome classe Extra) e inserire questo metodo di classe statica, quindi aggiungere altri metodi di classe statica quando arriva la situazione dove ha senso farlo in C ++ perché in alcuni casi è meno problematico. (Ci sono casi in cui ObjC fa qualcosa con meno righe di codice e alcuni casi in cui C ++ lo fa con meno righe di codice.)
PS Ancora un altro modo con questo è usare un file .mm ma creare un wrapper Objective C attorno all'uso di std :: string e std :: regex_replace () (o regex_match ()).