Привет, я пытаюсь преобразовать стандарт std::string
в формат, NSString
но мне не очень везет.
Я могу успешно преобразовать из NSString
a std::string
в следующий код
NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];
Однако я получаю ошибку времени компиляции, когда пытаюсь выполнить следующее
NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];
Я получаю ошибку
Cannot convert 'std::string' to 'const char*' in argument passing
Я что-то упустил?
Заранее спасибо.
objective-c
nsstring
objective-c++
stdstring
Энтони МакКормик
источник
источник
Ответы:
Получить c-строку из std :: string для преобразования:
источник
Во-первых, вы должны использовать Objective-C ++, чтобы это хоть немного работало; самый простой способ убедиться, что переименовать все ваши
*.m
файлы в*.mm
Безусловно, наиболее удобный (не устаревший) способ вручную вставить C ++
std::string
в C ++ -NSString
это:Это будет работать в большинстве случаев - и если вы не выполняете определенное определение и преобразование кодировки, UTF-8 даст вам хороший результат, если нелатинские символы «просто работают».
Однако, если вы создаете более крупное приложение или не единственный, кто работает над ним - вам, вероятно, понадобится что-то более простое в применении.
Адаптировано из архивов списков рассылки cocoa-dev
Имея это на месте (и соответствующим образом
#import
редактируя), теперь вы можете:И то же самое для
std::wstring
, что более чем удобно.источник
==
а скорее либо «самое близкое», либо «лучшее» представление, которое они могут сделать. Получателем в этом случае являетсяNSString
реализация класса, а возвращаемое значение не является объектом Objective-C, поэтому они также могут покрывать это с помощью некоторого стандартного языка.источник
У Apple теперь есть новый способ, которым они хотят, чтобы вы сделали это преобразование. В XCode7 я использовал опцию Edit> Convert> To Modern Objective C Syntax ..., чтобы выяснить это. Он использует сокращенный символ @.
источник
Я также обнаружил, что:
Работает как чемпион.
источник
Вот фрагмент / пример кода:
источник