Saya membuatnya mudah. Saya menambahkan file C ++ baru ke proyek Objective C saya, ganti namanya menjadi .mm, dan kemudian buat kelas C ++ standar di dalamnya. Kemudian, saya membuat metode kelas statis di bagian "publik:" untuk fungsi C ++ yang mengambil NSString dan mengembalikan NSString (atau NSArray, jika itu yang Anda inginkan). Saya kemudian mengonversi NSString ke C ++ std :: string seperti ini:
// 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;
}
Dari sana, saya bisa menggunakan regex_replace seperti:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
Lalu, saya bisa mengonversi std :: string itu kembali menjadi NSString dengan:
NSString *sResponse2 = @(sResult.c_str());
Jika Anda hanya menggunakan C ++ ini hanya untuk fungsi ini, maka Anda mungkin merasa cocok untuk memanggil file ini extra.mm (nama kelas Extra) dan memasukkan metode kelas statis ini, dan kemudian menambahkan metode kelas statis lainnya ketika situasi tiba di mana masuk akal untuk melakukannya di C ++ karena itu kurang merepotkan dalam beberapa kasus. (Ada beberapa kasus di mana ObjC melakukan sesuatu dengan lebih sedikit baris kode, dan beberapa kasus di mana C ++ melakukannya dengan lebih sedikit baris kode.)
PS Masih cara lain dengan ini adalah dengan menggunakan file .mm tetapi membuat pembungkus Objective C sekitar penggunaan std :: string dan std :: regex_replace () (atau regex_match ()).