次のように呼び出したい定数 NSString があります。
[newString isEqualToString:CONSTANT_STRING];
ここに間違ったコードはありますか?
次のような警告が表示されました:
'const NSString *' を 'NSString *' 型のパラメータに送信すると、修飾子が破棄されます。
これらはどのように宣言すればよいでしょうか?
ベストアンサー1
定数文字列は次のように宣言する必要があります。
NSString * const kSomeConstantString = @""; // constant pointer
の代わりに:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
前者はNSString
オブジェクトへの定数ポインターであり、後者は定数NSString
オブジェクトへのポインターです。
を使用すると、NSString * const
kSomeConstantString を別のオブジェクトを指すように再割り当てできなくなりますNSString
。
メソッドはisEqualToString:
型の引数を必要としますNSString *
。定数文字列 ( ) へのポインターを渡すとconst NSString *
、期待するものとは異なるものが渡されます。
さらに、NSString
オブジェクトはすでに不変なので、オブジェクトを作成してもconst NSString
意味がありません。