プログラマでありたい

おっさんになっても、プログラマでありつづけたい

NSStringのconstでdiscards qualifiersで怒られた場合の対処法

 C系のプログラムをする人達には常識なのかもしれませんが、Objective CでConstで宣言した値を、メソッド中で使用すると次のようなワーニングが出ます。

const NSString *CLEAR     = @"C";
~ 略 ~
-(BOOL) _isClear:(NSString *)character {
    if ([CLEAR isEqualToString:character]) {
        return TRUE;
    }
    return FALSE;
}

Warningの内容

Assigning to 'NSString *__strong' from 'const NSString *__strong' discards qualifiers

 次のように宣言すると警告は出なくなります。

NSString * const CLEAR = @"C";


 StackOverFlowに詳しく書かれていますが、そもそも最初の宣言の仕方が間違いだとのことです。NSStringに対するConstになるので、別の意味になるとのことです。今までObjective CでConst使ったことが無いので、全く知りませんでした。(というよりC言語に対する根本の所の理解が足りないのでしょうね。。。) 


参照:
sending 'const NSString *' to parameter of type 'NSString *' discards