ฉันทำให้มันง่าย ฉันเพิ่มไฟล์ C ++ ใหม่ลงในโครงการ Objective C ของฉันเปลี่ยนชื่อเป็น. mm แล้วสร้างคลาส C ++ มาตรฐานภายใน จากนั้นฉันสร้างเมธอดคลาสแบบสแตติกในส่วน "สาธารณะ:" สำหรับฟังก์ชัน 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 แต่สร้าง wrapper ของ Objective C โดยใช้ std :: string และ std :: regex_replace () (หรือ regex_match ())