Я делаю это легко. Я добавляю новый файл C ++ в свой проект Objective C, переименовываю его в .mm, а затем создаю стандартный класс C ++ внутри. Затем я делаю метод статического класса в разделе "public:" для функции C ++, которая принимает NSString и возвращает NSString (или NSArray, если это то, что вы хотите). Затем я конвертирую NSString в C ++ std :: string примерно так:
// 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;
}
Оттуда я могу использовать regex_replace так:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
Затем я могу преобразовать эту std :: string обратно в NSString с помощью:
NSString *sResponse2 = @(sResult.c_str());
Если вы используете этот C ++ только для этой функции, то вам может пригодиться вызвать этот файл extra.mm (имя класса Extra) и поместить этот метод статического класса, а затем добавить другие методы статического класса, когда ситуация придет. где просто имеет смысл делать это в C ++, потому что в некоторых случаях это менее хлопотно. (В некоторых случаях ObjC делает что-то с меньшим количеством строк кода, а в некоторых случаях C ++ делает это с меньшим количеством строк кода.)
PS Еще один способ - использовать файл .mm, но создать оболочку Objective C для использования std :: string и std :: regex_replace () (или regex_match ()).