“sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers” warning

后端 未结 3 823
遥遥无期
遥遥无期 2021-01-29 16:51

I have Constants NSString, that I want to call like:

[newString isEqualToString:CONSTANT_STRING];

Any wrong code here?

I got this warni

3条回答
  •  北海茫月
    2021-01-29 17:44

    You should declare your constant string as follows:

    NSString * const kSomeConstantString = @""; // constant pointer
    

    instead of:

    const NSString * kSomeConstantString = @""; // pointer to constant
    // equivalent to
    NSString const * kSomeConstantString = @"";
    

    The former is a constant pointer to an NSString object, while the latter is a pointer to a constant NSString object.

    Using a NSString * const prevents you from reassigning kSomeConstantString to point to a different NSString object.

    The method isEqualToString: expects an argument of type NSString *. If you pass a pointer to a constant string (const NSString *), you are passing something different than it expects.

    Besides, NSString objects are already immutable, so making them const NSString is meaningless.

提交回复
热议问题