Hallo, ich versuche einen Standard std::string
in einen umzuwandeln, NSString
aber ich habe nicht viel Glück.
Ich kann mit dem folgenden Code erfolgreich von a NSString
nach a konvertierenstd::string
NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];
Ich erhalte jedoch einen Fehler bei der Kompilierung, wenn ich Folgendes versuche
NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];
Der Fehler, den ich bekomme, ist
Cannot convert 'std::string' to 'const char*' in argument passing
Vermisse ich hier etwas?
Danke im Voraus.
objective-c
nsstring
objective-c++
stdstring
Anthony McCormick
quelle
quelle
Antworten:
Holen Sie sich c-string aus std :: string zur Konvertierung:
quelle
Erstens müssen Sie Objective-C ++ verwenden, damit dies im geringsten funktioniert. Der einfachste Weg, um sicherzustellen, dass alle Ihre
*.m
Dateien in umbenannt werden*.mm
Die bei weitem am besten verwendbare (nicht veraltete) manuelle Methode, um ein C ++
std::string
in ein C ++ zu bringen,NSString
ist:Dies funktioniert in den meisten Fällen - und wenn Sie keine spezifische Codierungserkennung und -konvertierung durchführen, liefert UTF-8 ein gutes Ergebnis, wenn nicht-lateinische Zeichen "nur funktionieren".
Wenn Sie jedoch eine größere App erstellen oder nicht die einzige sind, die daran arbeitet, möchten Sie wahrscheinlich etwas, das einfacher anzuwenden ist.
Angepasst aus den Archiven der Cocoa-Dev-Mailinglisten
Mit diesem In-Place (und entsprechend
#import
bearbeitet) können Sie jetzt:Und das gleiche für
std::wstring
, was mehr als praktisch ist.quelle
==
, sondern entweder die "engste" oder die "beste" Darstellung, die sie machen können. Der Empfänger ist in diesem Fall dieNSString
Klassenimplementierung, und der zurückgegebene Wert ist kein Objective-C-Objekt, sodass sie dies möglicherweise auch mit einer Standardsprache abdecken.quelle
Apple hat jetzt eine neue Möglichkeit, diese Konvertierung durchzuführen. In XCode7 habe ich die Option Bearbeiten> Konvertieren> In moderne Ziel-C-Syntax ... verwendet, um dies herauszufinden. Es wird ein Shorthand @ -Symbol verwendet.
quelle
Ich habe auch gefunden, dass:
Funktioniert wie ein Champion.
quelle
Hier ist das Code-Snippet / Beispiel:
quelle