Kolaylaştırıyorum. Objective C projeme yeni bir C ++ dosyası ekleyin, .mm olarak yeniden adlandırın ve sonra içinde standart bir C ++ sınıfı oluşturun. Sonra, bir NSString alır ve bir NSString (veya NSArray, isterseniz budur) döndüren bir C ++ işlevi için "public:" bölümünde statik bir sınıf yöntemi yapmak. Sonra C ++ std :: string NSString dönüştürmek gibi:
// 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;
}
Oradan, böyle regex_replace kullanabilirsiniz:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
Sonra, bu std :: string ile bir NSString dönüştürebilirsiniz:
NSString *sResponse2 = @(sResult.c_str());
Bu C ++ 'ı yalnızca bu işlev için kullanıyorsanız, bu dosyayı extra.mm (sınıf adı Ekstra) olarak adlandırmayı ve bu statik sınıf yöntemini koymayı ve durum geldiğinde diğer statik sınıf yöntemlerini eklemeyi uygun bulabilirsiniz. C ++ 'da bunu yapmak mantıklıdır çünkü bazı durumlarda daha az güçlük çeker. (ObjC'nin daha az kod satırıyla bir şeyler yaptığı durumlar ve C ++ 'nın daha az kod satırıyla yaptığı durumlar vardır.)
PS Bununla birlikte yine başka bir yol .mm dosyası kullanmak ancak std :: string ve std :: regex_replace () (veya regex_match ()) kullanımı etrafında bir Objective C sarıcı yapmaktır.