Öncelikle, bunun en ufak bir şekilde çalışması için Objective-C ++ kullanıyor olmanız gerekir; tüm *.m
dosyalarınızı şu şekilde yeniden adlandırmanızı sağlamanın en kolay yolu*.mm
Bir C ++ ' std::string
yı an içine almanın en kullanışlı (kullanımdan kaldırılmamış) manuel yolu NSString
şudur:
std::string param;
NSString* result = [NSString stringWithUTF8String:param.c_str()];
NSString* alternative = [[NSString alloc] initWithUTF8String:param.c_str()];
Bu çoğu durumda işe yarayacaktır - ve özel kodlama tespiti ve dönüşümü yapmıyorsanız, UTF-8 size latin olmayan karakterlerin 'sadece çalışması' için iyi bir sonuç verecektir.
Daha büyük bir uygulama yapıyorsanız veya üzerinde çalışan tek kişi siz değilseniz, muhtemelen uygulaması daha kolay olan bir şey isteyeceksiniz.
Kakao geliştirme posta listesi arşivlerinden uyarlanmıştır
@interface NSString (cppstring_additions)
+(NSString*) stringWithwstring:(const std::wstring&)string;
+(NSString*) stringWithstring:(const std::string&)string;
-(std::wstring) getwstring;
-(std::string) getstring;
@end
@implementation NSString (cppstring_additions)
#if TARGET_RT_BIG_ENDIAN
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32BE);
#else
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32LE);
#endif
+(NSString*) stringWithwstring:(const std::wstring&)ws
{
char* data = (char*)ws.data();
unsigned size = ws.size() * sizeof(wchar_t);
NSString* result = [[NSString alloc] initWithBytes:data length:size encoding:kEncoding_wchar_t];
return result;
}
+(NSString*) stringWithstring:(const std::string&)s
{
NSString* result = [[NSString alloc] initWithUTF8String:s.c_str()];
return result;
}
-(std::wstring) getwstring
{
NSData* asData = [self dataUsingEncoding:kEncoding_wchar_t];
return std::wstring((wchar_t*)[asData bytes], [asData length] / sizeof(wchar_t));
}
-(std::string) getstring
{
return [self UTF8String];
}
@end
Bu yerinde (ve uygun şekilde #import
) şimdi şunları yapabilirsiniz:
NSString* result = [NSString stringWithstring:param];
string convertedBack = [result getstring];
Ve aynı std::wstring
şey, kullanışlı olmaktan daha fazlası için.