Hai, Saya mencoba mengubah standar std::string
menjadiNSString
tetapi saya tidak terlalu beruntung.
Saya dapat berhasil mengkonversi dari a NSString
ke a std::string
dengan kode berikut
NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];
Namun saya mendapatkan kesalahan waktu kompilasi ketika saya mencoba yang berikut ini
NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];
Kesalahan yang saya dapatkan adalah
Cannot convert 'std::string' to 'const char*' in argument passing
Apakah saya melewatkan sesuatu di sini?
Terima kasih sebelumnya.
objective-c
nsstring
objective-c++
stdstring
Anthony McCormick
sumber
sumber
Jawaban:
Dapatkan c-string dari std :: string untuk konversi:
sumber
Pertama, Anda harus menggunakan Objective-C ++ untuk bekerja sekecil apa pun; cara termudah untuk memastikannya adalah mengganti nama semua
*.m
file Anda menjadi*.mm
Sejauh ini, cara manual yang paling berguna (tidak usang) untuk memasukkan C ++
std::string
ke dalamNSString
adalah dengan:Ini akan bekerja dalam banyak kasus - dan jika Anda tidak melakukan deteksi dan konversi pengkodean khusus, UTF-8 akan memberi Anda hasil yang baik karena karakter non-latin 'hanya berfungsi'.
Namun, jika Anda membuat aplikasi yang lebih besar, atau Anda bukan satu-satunya yang mengerjakannya - Anda mungkin menginginkan sesuatu yang lebih mudah diterapkan.
Diadaptasi dari arsip milis cocoa-dev
Dengan itu di tempat (dan dengan tepat
#import
) Anda sekarang dapat:Dan hal yang sama untuk
std::wstring
, yang lebih dari sekadar berguna.sumber
==
bolak-balik dan masih membandingkan melainkan menjadi representasi "terdekat" atau "terbaik" yang dapat mereka buat. Penerima dalam hal ini adalahNSString
implementasi kelas, dan nilai yang dikembalikan bukanlah objek Objective-C, jadi mereka mungkin juga menutupinya dengan beberapa bahasa standar.sumber
Apple sekarang memiliki cara baru yang mereka inginkan untuk Anda lakukan konversi ini. Di XCode7, saya menggunakan opsi Edit> Convert> To Modern Objective C Syntax ... untuk mengetahuinya. Ini menggunakan simbol singkatan @.
sumber
Saya juga menemukan bahwa:
Bekerja seperti juara.
sumber
Berikut cuplikan kode / contoh:
sumber