1. ホーム
  2. objective-c

[解決済み] 「NSString *' 型のパラメータに 'const NSString *' を送ると修飾子が破棄される」警告

2022-03-15 01:11:08

質問

定数NSStringがあるので、それを呼び出したいのですが。

[newString isEqualToString:CONSTANT_STRING];

何か間違ったコードはありませんか?

こんな警告が出ました。

const NSString *' を 'NSString *' 型のパラメータに送ると、修飾子が破棄されます。

これらはどのように宣言すればよいのでしょうか?

どのように解決するのですか?

定数文字列を以下のように宣言してください。

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 は意味がない。