Saya memiliki Constants NSString, yang ingin saya sebut seperti:
[newString isEqualToString:CONSTANT_STRING];
Ada kode yang salah di sini?
Saya mendapat peringatan ini:
mengirim 'const NSString *' ke parameter dari tipe 'NSString *' membuang kualifikasi
Bagaimana seharusnya ini dinyatakan?
objective-c
nsstring
warnings
constants
pengguna4951
sumber
sumber
Jawaban:
Anda harus mendeklarasikan string konstan Anda sebagai berikut:
dari pada:
Yang pertama adalah pointer konstan ke
NSString
objek, sedangkan yang kedua adalah pointer keNSString
objek konstan .Menggunakan
NSString * const
mencegah Anda menetapkan kembali kSomeConstantString untuk menunjuk keNSString
objek yang berbeda .Metode ini
isEqualToString:
mengharapkan argumen tipeNSString *
. Jika Anda meneruskan pointer ke string konstan (const NSString *
), Anda melewatkan sesuatu yang berbeda dari yang diharapkan.Selain itu,
NSString
objek sudah berubah, sehingga membuatnyaconst NSString
tidak ada artinya.sumber
const
kualifikasi berlaku untuk jangka di sebelah kiri, dan itu berlaku untuk jangka di sebelah kanan hanya jika tidak ada pada sisi kiri (misalnyaconst char *
danchar const *
pointer non-const untuk const char, tapichar *const
adalah pointer const char non-const ).hanya untuk meletakkan semua di satu tempat yang ditemukan di berbagai pos di stackoverflow dan berfungsi untuk saya, #define buruk karena Anda tidak dapat mengambil manfaat dari jenis variabel, pada dasarnya kompiler menggantikan semua kejadian ketika mengkompilasi (impor Constants.h kapan pun Anda membutuhkan):
sumber
luangkan beberapa menit untuk membaca ini. Goodread pada pointer neraka pada konstanta dan sebaliknya.
http://c-faq.com/decl/spiral.anderson.html
sumber